HTTP 輸入/輸出字符編碼轉換同樣也適用于二進(jìn)制數據。 如果 HTTP 輸入/輸出用到了二進(jìn)制數據,用戶(hù)應當控制字符的編碼轉換。
注意:
如果 HTML 表單的
enctype
屬性設置為multipart/form-data
,并且 php.ini 里的mbstring.encoding_translation
設置為 On, POST 的變量以及上傳文件的名稱(chēng)也將會(huì )被轉換到內部字符編碼。 不過(guò),轉換不會(huì )應用于查詢(xún)(query)的鍵。
在 PHP 腳本里無(wú)法控制 HTTP 輸入字符的轉換。 要禁用 HTTP 輸入字符的轉換,必須要在 php.ini 里設置。
示例 #1 在 php.ini 中禁用 HTTP 輸入轉換
;; 禁用 HTTP 輸入轉換 mbstring.http_input = pass ;;禁用 HTTP 輸入轉換 mbstring.encoding_translation = Off
當 PHP 以 Apache 模塊運行。這些設置還可以通過(guò) httpd.conf 內每個(gè)虛擬主機(Virtual Host)指令或每個(gè)目錄下的 .htaccess 來(lái)覆蓋(override)。 詳情參見(jiàn)配置這一節,以及 Apache 手冊。
輸出字符編碼轉換的使用有幾種方式。
一種是使用 php.ini,另一種是使用 ob_start(),以 mb_output_handler() 作為 ob_start
的回調函數。
示例 #2 php.ini 設置例子
;; 為所有 PHP 頁(yè)面啟用輸出字符編碼的轉換 ;; 啟用輸出緩沖 output_buffering = On ;; 設置 mb_output_handler 來(lái)進(jìn)行輸出的轉換 output_handler = mb_output_handler
示例 #3 腳本例子
<?php
// 僅為此頁(yè)面啟用輸出字符編碼的轉換
// 設置 HTTP 輸出字符編碼為 SJIS
mb_http_output('SJIS');
// 開(kāi)始緩沖并指定 "mb_output_handler" 為回調函數
ob_start('mb_output_handler');
?>