[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: substr и пол символа
Max_L
есть такая строчка $mes->ad_headline кодировка UTF-8
substr( $mes->ad_headline, 0, 28)." ...";

выводится
Flower by Kenzo(мак) 100� ...

т.к. Flower by Kenzo(мак) 100 =27 символов, а нужно выбрать 28, но как я понимаю т.к. 28ой символ написан кирилицей и имеет 2 знака, то показывает знак вопроса. wink.gif

Как решить? подсчитать длину строки и прибавить если значение нечётное? smile.gif



Спустя 2 минуты, 27 секунд (24.03.2010 - 19:06) DedMorozzz написал(а):
используй бибилиотеку "mb_"

Спустя 3 минуты, 26 секунд (24.03.2010 - 19:10) Max_L написал(а):
только что попробовал, тоже самое(

Спустя 14 минут, 23 секунды (24.03.2010 - 19:24) phz написал(а):
А если к примеру так:

$str = 'Кодировка у вас какая?';
$str = iconv("UTF-8", "cp1251", $str);
$str = substr ($str , 0, 5 );
echo $str;

Спустя 3 минуты, 28 секунд (24.03.2010 - 19:28) Max_L написал(а):
так всю кирилицу не читает

Спустя 15 минут, 43 секунды (24.03.2010 - 19:43) Max_L написал(а):
нашёл на этом форуме через страницу похожую тему.
тоже не решено.

Кодировка на движке UTF-8, если добавляю новость, то в конце текста добавляется в мозиле символ вопроса в черном ромбе, в IE пустой квадрат.
прочитал что Цитата
Если кодировка интерфейса UTF-8, SAMS не правильно обрезает кириллические строки. Такие функции как substr отрезают по 1 байту. Это приводит к тому, что последний символ в кодировке UTF-8 обрезается лишь на 1 байт (в UTF-8 кириллица занимает 2 байта), что приводит к дефектному отображению последнего символа, от которого остается только 1 байт.

substr заменил в коде на mb_substr ситуация не изменилась.
вот тот фрагмент кода в котором производил замену

Спустя 4 минуты, 44 секунды (24.03.2010 - 19:48) phz написал(а):
Где код?

mbstring расширение не установленно у вас наверно...

Кодировку указывали? mb_substr($string,$start,$length,'utf-8')

Спустя 21 минута, 11 секунд (24.03.2010 - 20:09) Max_L написал(а):
всем спасибо, нашёл на другом форуме:


function utf8_substr($str,$from,$len){
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}

Спустя 4 минуты, 40 секунд (24.03.2010 - 20:14) Max_L написал(а):
Цитата (phz @ 24.03.2010 - 16:48)
Где код?

mbstring расширение не установленно у вас наверно...

Кодировку указывали? mb_substr($string,$start,$length,'utf-8')

Это работает. Спасибо. Так удобней и короче. Не прочитал сразу как функция работает( кодировку не указал
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.