HTTP 输入/输出字符编码转换也可能转换二进制数据。如果二进制数据用于 HTTP 输入/输出,用户应该控制字符编码转换。
注意:
如果 HTML 表单的
enctype
设置为multipart/form-data
并且mbstring.encoding_translation
在 php.ini 中设置为 On,则 POST 变量和上传文件的名称也将被转换为内部字符编码。但是,转换不适用于查询键。
无法从 PHP 脚本控制 HTTP 输入字符转换。要禁用 HTTP 输入字符转换,必须在 php.ini 中进行。
示例 #1 在 php.ini 中禁用 HTTP 输入转换
;; Disable HTTP Input conversion mbstring.http_input = pass ;; Disable HTTP Input conversion mbstring.encoding_translation = Off
当将 PHP 用作 Apache 模块时,可以在 httpd.conf 中每个虚拟主机指令中或通过 .htaccess 针对每个目录覆盖这些设置。有关详细信息,请参阅 配置 部分和 Apache 手册。
有几种方法可以启用输出字符编码转换。一种是使用 php.ini,另一种是使用 ob_start() 以及 mb_output_handler() 作为 ob_start
回调函数。
示例 #2 php.ini 设置示例
;; Enable output character encoding conversion for all PHP pages ;; Enable Output Buffering output_buffering = On ;; Set mb_output_handler to enable output conversion output_handler = mb_output_handler
示例 #3 脚本示例
<?php
// 仅为此页面启用输出字符编码转换
// 将 HTTP 输出字符编码设置为 SJIS
mb_http_output('SJIS');
// 开始缓冲并指定 "mb_output_handler" 作为
// 回调函数
ob_start('mb_output_handler');
?>