• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

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

Горбушка

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

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

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

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

Но лучше сразу менять на (для DLE) :
PHP:
htmlspecialchars( stripslashes( $qs['question'] ), ENT_QUOTES, $config['charset'] );
 
Последнее редактирование:
Как рекурсивно заменить функцию, например через нотпад++ (он имеет возможность замены по регулярным выражениям)
 
Как рекурсивно заменить функцию, например через нотпад++ (он имеет возможность замены по регулярным выражениям)
Рег. выражения: найти htmlspecialchars(.*); и заменить на htmlspecialchars\(\1, NULL, 'UTF-8'\);
Для просмотра ссылки Войди или Зарегистрируйся
Проверил на двух файлах - работает. Но опять же нужно учитывать и пробел, потому что иногда в коде написано htmlspecialchars () через пробел.

UPD поправил то что нужно искать, забыл указать в конце ;...
 
Последнее редактирование:
Подскажите пожалуйста, имеем к примеру такое:
Код:
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');
 
PHP:
htmlspecialchars( stripslashes( $qs['question'] ), ENT_QUOTES, $config['charset'] );
Это уже корректная запись, ничего менять не нужно.

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

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