Некорректное урезание текста.

Статус
В этой теме нельзя размещать новые ответы.

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Установил Джумловский шаблон YouNews.
Там подключено несколько модулей.
Написал пост на русском языке.
Есть модуль вывода новостей из определённой категории.
Новость выводится до n-го символа.
Обнаружил глюк.
Если этот n-й символ далеко от окончания слова, т.е. ещё есть 1-3 символа, то слово режется нормально.
Но если больше этого, то последний символ будет тёмный ромбик и в нём белый вопросительный знак.
bb257491c21d.jpg


Модуль в приложении.
Вот сама строчка, где происходит нарезка:
'title' => substr(strip_tags($row->title),0,$title_chars),

Пробовал добавить перед
PHP:
$db->setQuery( $sql );
Получил:
PHP:
$db->setQuery ("SET NAMES utf8");	
$db->setQuery ("set character set utf8"); 			
$db->setQuery( $sql );
Всё равно не помогает.
Подскажите, что не так?
 

Вложения

  • mod_yn_slider.rar
    22,1 KB · Просмотры: 4
Не помогло.
 
mb_функция ;) mb_ - аналоги стандартных функций с поддержкой мультибайтовых строк. только проверять наличие не забывайте.
 
'title' => mb_substr(strip_tags($row->title),0,$title_chars,'utf-8'),

Сделал вот так... Всё равно какую-то кракозябу в конце выводит.

P.S.
Всё разобрался.
Ваш вариант - рабочий.
РНР на хостинге подглючило, попросили знакомого из суппорта он разобрался.
Что-то в настройке РНР было.
 
тогда сделать сначала что то типа
PHP:
$title=iconv('utf-8','windows-1251',strip_tags($row->title));
$title=substr($title,0,$title_chars);
$title=iconv('windows-1251','utf-8',$title);
И еще можно попробовать
Код:
http://www.php.net/manual/en/function.mb-strcut.php
 
чтоб заработал mb_substr и другие mb_ надо для него указать кодировку где нибудь перед использованием:
PHP:
mb_internal_encoding("UTF-8");
или настроить в php.ini mbstring.internal_encoding = UTF-8
ещё увидел $title_chars наверное использует strlen тогда заменить на mb_strlen будет точно подсчитывать.

или если куча таких однобайтовых функций то в настройках php.ini поставить
mbstring.func_overload = 7
тогда все однобайтовые функции будут заменятся двухбайтовыми аналогами.

 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху