HTTP 輸入和輸出

HTTP 輸入/輸出字符編碼轉(zhuǎn)換同樣也適用于二進制數(shù)據(jù)。 如果 HTTP 輸入/輸出用到了二進制數(shù)據(jù),用戶應當控制字符的編碼轉(zhuǎn)換。

注意:

如果 HTML 表單的 enctype 屬性設置為 multipart/form-data,并且 php.ini 里的 mbstring.encoding_translation 設置為 On, POST 的變量以及上傳文件的名稱也將會被轉(zhuǎn)換到內(nèi)部字符編碼。 不過,轉(zhuǎn)換不會應用于查詢(query)的鍵。

  • HTTP 輸入

    在 PHP 腳本里無法控制 HTTP 輸入字符的轉(zhuǎn)換。 要禁用 HTTP 輸入字符的轉(zhuǎn)換,必須要在 php.ini 里設置。

    示例 #1 在 php.ini 中禁用 HTTP 輸入轉(zhuǎn)換

    ;; 禁用 HTTP 輸入轉(zhuǎn)換
    mbstring.http_input = pass
    ;;禁用 HTTP 輸入轉(zhuǎn)換 
    mbstring.encoding_translation = Off

    當 PHP 以 Apache 模塊運行。這些設置還可以通過 httpd.conf 內(nèi)每個虛擬主機(Virtual Host)指令或每個目錄下的 .htaccess 來覆蓋(override)。 詳情參見配置這一節(jié),以及 Apache 手冊。

  • HTTP 輸出

    輸出字符編碼轉(zhuǎn)換的使用有幾種方式。 一種是使用 php.ini,另一種是使用 ob_start(),以 mb_output_handler() 作為 ob_start 的回調(diào)函數(shù)。

示例 #2 php.ini 設置例子

;; 為所有 PHP 頁面啟用輸出字符編碼的轉(zhuǎn)換

;; 啟用輸出緩沖
output_buffering    = On

;; 設置 mb_output_handler 來進行輸出的轉(zhuǎn)換
output_handler      = mb_output_handler

示例 #3 腳本例子

<?php

// 僅為此頁面啟用輸出字符編碼的轉(zhuǎn)換

// 設置 HTTP 輸出字符編碼為 SJIS
mb_http_output('SJIS');

// 開始緩沖并指定 "mb_output_handler" 為回調(diào)函數(shù)
ob_start('mb_output_handler');

?>