Инфо Нет русских символов - общая тема

Тема в разделе "DLE", создана пользователем Горбушка, 19 мар 2014.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.1 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.036
    Симпатии:
    2.039
    Описание проблемы:
    В модулях, во всех версиях ДЛЕ и т.д. везде или в отдельных местах не выводятся русские символы, при этом английские символы показываются корректно.

    Причины проблемы:
    В 99% случаев причиной проблемы является PHP 5.4 и выше. Дело в том, что разработчики PHP решили подарить нам геморрой, изжогу и ненависть к себе долгожданную поддержку UTF-8 и других кодировок. Но при этом изменили синтаксис htmlspecialchars().

    Решение проблемы:
    Для исправления проблемы достаточно по всему коду сделать следующие изменения:
    PHP:
    htmlspecialchars($string);
    Заменить на:
    PHP:
    htmlspecialchars($stringNULL'UTF-8');
    Внимание! Вместо $string может быть любая переменная, строка и даже функция. Вместо UTF-8 следует указывать cp1251 для ДЛЕ cp1251, UTF-8 для ДЛЕ UTF-8.

    Для внесения изменений нужен начальный навык программирования PHP. Если у Вас нет опыта и не уверены в своих действиях (а скорее всего это так, раз Вы читаете эту тему), рекомендуется перед внесением изменений сделать резервную копию файлов. Если самостоятельно решить проблему не получается - выкладывайте файлы (через файлообменники - рекомендуем rghost, narod), мы Вам поможем. Заранее позаботьтесь и найдите все файлы, в которых есть функция htmlspecialchars, чтобы нам не искать по всему модулю.

    Но лучше сразу менять на (для DLE) :
    PHP:
    htmlspecialcharsstripslashes$qs['question'] ), ENT_QUOTES$config['charset'] );
     
    Последнее редактирование: 7 окт 2015
    shum64, latteo, killoff и ещё 1-му нравится это.
  2. shum64

    shum64 Постоялец

    Регистр.:
    2 фев 2007
    Сообщения:
    113
    Симпатии:
    33
    Как рекурсивно заменить функцию, например через нотпад++ (он имеет возможность замены по регулярным выражениям)
     
  3. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.022
    Симпатии:
    689
    Рег. выражения: найти htmlspecialchars(.*); и заменить на htmlspecialchars\(\1, NULL, 'UTF-8'\);
    http://yadi.sk/d/zMKMzLJ3Krtgf
    Проверил на двух файлах - работает. Но опять же нужно учитывать и пробел, потому что иногда в коде написано htmlspecialchars () через пробел.

    UPD поправил то что нужно искать, забыл указать в конце ;...
     
    Последнее редактирование: 20 мар 2014
    rider1203 и Горбушка нравится это.
  4. Dr_web

    Dr_web Создатель

    Регистр.:
    21 июн 2013
    Сообщения:
    28
    Симпатии:
    32
    Подскажите пожалуйста, имеем к примеру такое:
    Код:
    htmlspecialchars( stripslashes( $qs['question'] ), ENT_QUOTES, $config['charset'] );
    Как будет правильно:
    Так
    Код:
    $qs['question'] =  htmlspecialchars($string, NULL, 'UTF-8'); ( stripslashes( $qs['question'] ), ENT_QUOTES, $config['charset'] );
    Или всё это:
    Код:
    htmlspecialchars( stripslashes( $qs['question'] ), ENT_QUOTES, $config['charset'] );
    заменять на
    Код:
    htmlspecialchars($string, NULL, 'UTF-8');
     
  5. Твоя

    Твоя Создатель

    Регистр.:
    31 мар 2013
    Сообщения:
    14
    Симпатии:
    12
    PHP:
    htmlspecialcharsstripslashes$qs['question'] ), ENT_QUOTES$config['charset'] );
    Это уже корректная запись, ничего менять не нужно.

    Просто в данном случае, ENT_QUOTES - это флаг, заменяющий NULL в предложенном выше алгоритме. ENT_QUOTES отвечает за преобразование и двойных, и одиночных кавычки. А кодировка просто подставляется из файла конфигурации $config['charset'] - она равносильно cp1251 или utf-8 соответственно.

    Что касается stripslashes( $qs['question'] ) - просто вместо строки подставляется результат выполнения функции stripslashes, это так же допустимая запись.
     
    Последнее редактирование: 30 апр 2014
    Dr_web нравится это.