HTTP 入出力

HTTP 入出力の文字エンコーディング変換はバイナリデータも変換して しまいます。HTTP 入出力にバイナリデータが使用される場合、ユーザーは、 文字エンコーディング変換を制御する必要があります。

注意:

HTML フォームの enctypemultipart/form-data に設定され、かつ、 php.ini において mbstring.encoding_translation に On が指定されている場合、 POST データの変数とアップロードされたファイルの名前の文字エンコーディングは、 内部文字エンコーディングに変換されます。 ただし、クエリキーに関しては、変換されません。

  • HTTP 入力

    PHP スクリプトで HTTP 入力文字変換を制御する手段はありません。 HTTP 入力文字変換を無効にするには、php.ini で行う必要があります。

    例1 php.ini で HTTP 入力変換を無効にする

    ;; HTTP 入力変換を無効にする
    mbstring.http_input = pass
    ;; HTTP 入力変換を無効にする
    mbstring.encoding_translation = Off

    PHP を Apache モジュールで使用する場合、php.ini の設定を httpd.conf により仮想ホスト単位で、または .htaccess によりディレクトリ単位で上書きすることが可能です。 詳細は、設定の節および Apache マニュアルを参照ください。

  • HTTP 出力

    出力の文字エンコーディング変換を有効にする方法は複数あります。 まず php.ini、もうひとつは ob_startob_start のコールバック関数として mb_output_handler を指定するものです。

例2 php.ini の設定例

;; 全ての PHP ページで出力の文字エンコーディング変換を有効にする

;; 出力バッファリングを有効にする
output_buffering    = On

;; mb_output_handler による出力変換を有効にする
output_handler      = mb_output_handler

例3 スクリプトの例

<?php

// このページでのみ出力の文字エンコーディング変換を有効にする

// HTTP 出力文字エンコーディングをSJISに設定する
mb_http_output('SJIS');

// 出力のバッファリングを開始し、コールバック関数として"mb_output_handler"
// を指定する
ob_start('mb_output_handler');

?>