HTTP 输入/输出字符编码转换也可能转换二进制数据。如果使用二进制数据进行 HTTP 输入/输出,用户应该控制字符编码转换。
注意:
如果 HTML 表单的
enctype
设置为multipart/form-data
并且 php.ini 中的mbstring.encoding_translation
设置为 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');
?>