Исправление искаженного ввода формы в PHP: UTF-8 и mbstring


Дата публикации:

Обновлено:


Статьи > Исправление искаженного ввода формы в PHP: UTF-8 и mbstring

Статус 2026 и безопасное использование

Вывод: Сохраняйте одну явную кодировку — обычно UTF-8 — для формы HTML, ответа HTTP, источника PHP, обработки строк и подключения к базе данных. Прежде чем менять глобальные настройки, запишите необработанные входные данные и определите границу, где байты декодируются неправильно.

Чему вы научитесь

  • Как отличить проблему отображения от преобразования входных данных или повреждения базы данных.
  • Какие заголовки и настройки PHP актуальны для современных приложений UTF-8.
  • Почему устаревшие рецепты mbstring.internal_encoding и mbstring.http_input, приведенные ниже, не следует копировать в текущее развертывание.

Для кого: специалисты по сопровождению PHP, устраняющие неполадки mojibake после проверки формы, перенаправления или обращения к базе данных.

Актуальность на 2026 год: PHP отказался от старых директив кодирования iconv/mbstring в PHP 5.6 в пользу default_charset; современный код должен сделать кодирование явным на каждой границе. Исходная конфигурация сохранена только для объяснения исторического происшествия.

Примечание по безопасности. Команды и примеры конфигурации из исходной статьи не проверялись повторно в современной производственной среде. Перед применением проверьте поддерживаемые версии, резервные копии, контроль доступа и процедуру отката в отдельной тестовой среде.

Официальные первоисточники

Обзор

При переходе от экрана ввода к экрану подтверждения в PHP возникал мусорный текст.

При вводе текста в форму и переходе к экрану подтверждения текст искажается.

При переходе к собственному экрану из-за ошибок проверки ввода также появляется искаженный текст.

Поскольку сервер был только что собран, я почувствовал, что чего-то не хватает в конфигурации PHP, поэтому я опишу, что я обнаружил в тот момент.


Оглавление

  1. расследование (для определения причины чего-либо)
  2. резюме

1. расследование (для определения причины чего-либо)

Для выяснения причины проблемы была изучена следующая информация.

1-1. опрос

Во-первых, проверьте настройки PHP (php.ini).

php.ini


default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On

Он соответствует описанию выше и, похоже, в полном порядке.

Тогда проблема, похоже, вызвана источником PHP.

Однако источник PHP не определил вероятную проблему.

Я еще раз проверил php.ini на подозрительные настройки и нашел одну подозрительную настройку.

php.ini


mbstring.http_input = auto

Было неясно, кодируется ли он в UTF-8, поскольку было установлено значение auto, поэтому для проверки он был изменен следующим образом.

php.ini


mbstring.http_input = UTF-8

Успешное устранение искаженного текста.

Эта настройка необходима для модуля mbstring при использовании в PHP многобайтовых строк, таких как японский язык.

Настройка кодировки получаемых http-запросов.

2. резюме

Если возникает искаженный текст, сначала попробуйте организовать поток обработки.

Если при использовании PHP для перехода от экрана ввода к экрану подтверждения или других переходов между экранами у вас появляются искаженные символы, проверьте следующие настройки в php.ini.

По умолчанию установлено значение 'auto', поэтому проверьте его при использовании mbstring для обработки многобайтовых строк.

■INFORMATION

Статьи


■PROFILE

Профиль


■Контакты

Контакты