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

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 4 фев 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Установил Джумловский шаблон YouNews.
    Там подключено несколько модулей.
    Написал пост на русском языке.
    Есть модуль вывода новостей из определённой категории.
    Новость выводится до n-го символа.
    Обнаружил глюк.
    Если этот n-й символ далеко от окончания слова, т.е. ещё есть 1-3 символа, то слово режется нормально.
    Но если больше этого, то последний символ будет тёмный ромбик и в нём белый вопросительный знак.
    [​IMG]

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

    Вложения:

  2. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    Вместо substr используйте mb-substr
    http://php.net/manual/en/function.mb-substr.php
    Естественно, для работы этой функции нужно чтобы на сервере было это расширение
     
    LEXAlForpostl нравится это.
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Не помогло.
     
  4. exn

    exn Постоялец

    Регистр.:
    22 янв 2010
    Сообщения:
    146
    Симпатии:
    23
    mb_функция ;) mb_ - аналоги стандартных функций с поддержкой мультибайтовых строк. только проверять наличие не забывайте.
     
    LEXAlForpostl нравится это.
  5. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Сделал вот так... Всё равно какую-то кракозябу в конце выводит.

    P.S.
    Всё разобрался.
    Ваш вариант - рабочий.
    РНР на хостинге подглючило, попросили знакомого из суппорта он разобрался.
    Что-то в настройке РНР было.
     
  6. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    тогда сделать сначала что то типа
    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
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    чтоб заработал 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
    тогда все однобайтовые функции будут заменятся двухбайтовыми аналогами.


    http://php.net/manual/en/mbstring.configuration.php
     
Статус темы:
Закрыта.