Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Некорректная обрезка предложений с помощью TruncateText

00 голосов
7
Для сокращения полного описания раздела использую функцию TruncateText. Она обрезает правильно, но перед многоточиями почему-то появляется знак вопроса в треуголничке. В чем может быть дело? С кодировокой вроде пробемл нет.
спросил 06 Авг, 13 от Titan91 (1,120 баллов)

7 Ответы

00 голосов
Данные в какой кодировке? Данная функция обрезает строку под win-1251.

Под utf-8 используйте следующий код

Код
<?=( mb_strlen( $string ) > $need_lenght ) ? mb_substt( $string, $start_pos, $lenght )." ..." : $string?>
ответил 06 Авг, 13 от LiveToWIn (360 баллов)
00 голосов
Цитата
Ivan Monakhov пишет:
Данные в какой кодировке? Данная функция обрезает строку под win-1251.
если все правильно настроено (mbstring.func_overload=2), то все должно работать нормально.
http://www.php.net/manual/en/mbstring.overload.php
ответил 07 Окт, 13 от Almarea (3,760 баллов)
00 голосов
Парадокс, я привет универсальное рабочее решение и получил "-". Дмитрий Яковенко, к сожалению не у всех все всегда корректно настроено.
ответил 07 Янв, 14 от LiveToWIn (360 баллов)
00 голосов
Цитата
Ivan Monakhov пишет:
Дмитрий Яковенко, к сожалению не у всех все всегда корректно настроено.
Значит нужно настраивать корректно, а не подпирать костылями. Проекты потом вот с такими костылями очень весело поддерживать!
ответил 24 Апр, 14 от Almarea (3,760 баллов)
00 голосов
Так а в чем костыль в данном конкретном случае (я имею в виду приведенный мной кусок кода)? Извините, но я не считаю целевой прямой вызов php_функции костылем )
ответил 19 Авг, 14 от LiveToWIn (360 баллов)
00 голосов
Ivan Monakhov,
Дело не в костыле, а в том, что строковые функции во всём ядре на мбстринг не переписать. Так что некорректно настроенная перегрузка потом ещё аукнется в другом месте.
ответил 24 Дек, 14 от LediDrak (180 баллов)
00 голосов
Код
<?=( mb_strlen( $name ) > 30 ) ? mb_substr( $name, 0, 30)." ..." : $name?>
 
Это не работает.. так же выводится Название товара� ...
ответил 13 Апр, 15 от Runch (120 баллов)

Похожие вопросы

0 голосов
0 ответов
0 голосов
2 ответов
0 голосов
3 ответов
спросил 20 Март, 14 от Hukto (120 баллов)
0 голосов
2 ответов
0 голосов
3 ответов