2024 PHP 日本大会

HTTP 输入和输出

HTTP 输入/输出字符编码转换也可能转换二进制数据。如果使用二进制数据进行 HTTP 输入/输出,用户应该控制字符编码转换。

注意:

如果 HTML 表单的 enctype 设置为 multipart/form-data 并且 php.ini 中的 mbstring.encoding_translation 设置为 On,则 POST 的变量和上传文件的名称也将转换为内部字符编码。但是,此转换不适用于查询键。

  • HTTP 输入

    无法从 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 手册。

  • HTTP 输出

    有几种方法可以启用输出字符编码转换。一种是使用 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');

?>

添加注释

用户贡献笔记

此页面没有用户贡献的笔记。
To Top