Механизм преобразования кодировок ввода-вывода HTTP также способен конвертировать двоичные данные. Пользователи должны сами следить за преобразованием кодировки символов, если в качестве ввода-вывода HTTP передаются двоичные данные.
Замечание:
Если для атрибута HTML-формы
enctype
установлено значениеmultipart/form-data
, а для директивыmbstring.encoding_translation
в файле php.ini установлено значение On, переменные и имена загружаемых файлов в POST-запросах конвертируются во внутреннюю кодировку скрипта автоматически. Однако это не относится к ключам запроса.
Невозможно контролировать преобразование символов HTTP-ввода из PHP-скрипта. Отключить преобразование символов HTTP-ввода можно в файле php.ini.
Пример #1 Отключение преобразования кодировки HTTP-ввода в файле php.ini
;; Отключение конвертации mbstring.http_input = pass ;; Отключение конвертации mbstring.encoding_translation = Off
Если PHP работает как модуль Apache, можно переопределить эти настройки в каждой директиве виртуального хоста (Virtual Host) в файле конфигурации httpd.conf или для каждой директории в файле .htaccess. Дополнительная информация дана в разделе «Конфигурация» и к руководству по работе с веб-сервером Apache.
Есть несколько способов включить преобразование кодировки символов
вывода. Один из них — файл php.ini, другой —
вызов функции ob_start()
с передачей в ob_start
функции mb_output_handler()
в качестве callback-функции.
Пример #2 Пример настройки php.ini
;; Включение преобразования кодировки символов вывода для всех PHP-страниц ;; Включение буферизации вывода output_buffering = On ;; Установка функции mb_output_handler в качестве значения директивы для включения конвертации вывода output_handler = mb_output_handler
Пример #3 Пример скрипта
<?php
// Включение преобразования кодировки символов вывода только для этой страницы
// Установка кодировки символов HTTP-вывода в значение SJIS
mb_http_output('SJIS');
// Запуск буферизации и определение функции «mb_output_handler» в качестве
// callback-функции
ob_start('mb_output_handler');
?>