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)的鍵。
在 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 手冊。
輸出字符編碼轉(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');
?>