Почему htmlspecialchars не работает на хостинге

Мне поступают вопросы о том, почему вдруг на некоторых PHP-хостингах перестали работать функции htmlspecialchars() и htmlentities(). Если у Вас такая же ситуация, то Вы по адресу.

Причина вот в чём. Скорее всего, Вы используете кодировку windows-1251 или cp1251 (что одно и то же) в своём коде. Некоторые продвинутые хостинги уже перешли на новую версию PHP5.4.x, а в ней дефолтовая кодировка — utf-8, а указанные функции стали многобайтовыми, поэтому по-старому они работать не будут без явного указания кодировки.

Что же делать? Необходимо явно указывать кодировку (третьим параметром) или написать свою функцию, например,

function myhsc($str) {
    return htmlspecialchars($str, null, "windows-1251");
}

Но лучший выход — перевести проект на utf-8. Как говорится, лучше день потерять, потом за 5 минут долетать.

P.S. В багтреккере PHP есть багрепорт относительно этого, но разработчики отметили это как «не баг». Там же есть длительная дискуссия относительно того, что кому-то такая ситуация неудобна, т.к. приходится править много кода. Но, друзья, не говорите мне, что вас не предупреждали ещё 2-3 года назад, что windows-1251 — устаревшая кодировка и скоро она будет потихоньку выводиться из обращения. Прогресс, никуда не денешься. Пожинайте плоды собственной медлительности. А впредь пытайтесь идти в ногу со временем.

Успехов!

Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Евгений
Евгений
10 лет назад

Вот спасибо большое! А то поставил у себя вместо Denwer-а XAMPP сервер, и не въезжал, что за ошибки были.

Антон Разин
9 лет назад

У меня такая же проблема! Что бы перейти на utf-8 нужно и в базе данных поменять кодировку и на страницах сайта?

9 лет назад
Ответить на  Антон Разин

Именно так. Нужно поменять везде. В базе поменяйте кодировку на всех текстовых полях, а после mysql_connect() добавьте метод mysql_query(‘set names «utf8″‘). Ну и meta в html-выводе поменяйте.