Почему после переезда на php 5.5 не показывается кириллица в форме?

Есть сайт в кодировке cp1251.
Есть форма редактирования, к примеру, новости:
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="title" style="width: 98%" />
</form>

Данные для существующей новости заполняются таким образом:
берем информацию из базы, заполняем $_POST['title'], показываем форму.

Проблема: после перехода на php 5.5, в input при использовании кириллицы показывается пустая строка.
При использовании только английских букв все работает хорошо.

Добавлю что при выводе $_POST['title'] на экран показывается нужная строка вне зависимости от символов.

Здесь не используется htmlspecialchars и другие функции работы с текстом.
Конечно, можно было бы поставить во всех инпутах value="...", но проблема в том, что таких форм много и все-таки хочется разобраться, в чем дело.

Возможно, что-то с настройками сервера?
  • Вопрос задан
  • 2800 просмотров
Решения вопроса 1
Akdmeh
@Akdmeh
PHP, Yii2, Music
В том, что это ненормативное поведение - $_POST['title'] не должен и никогда и не будет отображаться в форме сам по себе, это нужно указывать вручную. Почему оно отображалось раньше - это какая-то мистика, может какой-то плагин JS или какой-то обработчик php, который буферизировал вывод и затем добавлял value вручную. Чтобы более точно ответить, нужно посмотреть сайт на старой версии, тогда можно было бы выяснить.
Но единственный способ отображать не зависимо от версий и каких-то неизвестных мне модулей только так:
<input type="text" name="title" style="width: 98%" value="<?php echo htmlspecialchars($_POST['title'], ENT_QUOTES, "cp1251") ?>" />
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@illgoifyougo Автор вопроса
Спасибо большое, Akdmeh. Причина была в библиотеке HTML_FormPersister, обрабатывающей формы. В ней было выполнение htmlspecialchars через call_user_func, без указания кодировки, а так как у htmlspecialchars начиная с php 5.4 дефолтная кодировка utf8, все поля приходили пустыми.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы