Проблема с POST, htmlspecialchars и PHP 5

После переезда на новый сервер, естественно обновился PHP. При переходе с 4 на 5 часть скриптов работать перестала. В частности при редактировании и добавлении товара в каталог движок начал выдавать ошибку, о том, что неверно указано имя товара. Копнув глубже, увидел, что POST перестал передавать данные.

Оказалось, что функция htmlspecialchars обрабатывала в движке GET и POST, заодно и trim-ила их. При переходе на новый PHP 5.4.0 кодировкой по умолчанию стала UTF-8.

У функции htmlspecialchars() есть необязательный параметр $encoding, которым определяется кодировка преобразуемой строки. До версии PHP 5.4.0 значением по умолчанию данного параметра была кодировка «ISO-8859-1», после 5.4.0 кодировкой по умолчанию стала UTF-8. Таким образом, вызывая функцию как htmlspecialchars($str), где $str — строка в кодировке отличной от UTF-8 (например windows-1251), имеем на выходе пустую строку. Чтобы разрешить данную ситуацию, необходимо указать кодировку передаваемой строки при вызове функции, например вот так:

$str = htmlspecialchars($str, ENT_COMPAT, ‘cp1251’);

Документация: https://php.net/manual/ru/function.htmlspecialchars.php

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *