HTTP 輸入/輸出字元編碼轉換也可能會轉換二進位資料。如果 HTTP 輸入/輸出使用二進位資料,使用者應該控制字元編碼轉換。
注意:
如果 HTML 表單的
enctype
設定為multipart/form-data
且 php.ini 中的mbstring.encoding_translation
設定為開啟,則 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');
?>