HTTP 輸入和輸出

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

注意:

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

  • HTTP 輸入

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

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

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

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

  • HTTP 輸出

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

示例 #2 php.ini 設(shè)置例子

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

;; 啟用輸出緩沖
output_buffering    = On

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

示例 #3 腳本例子

<?php

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

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

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

?>