PHPのマルチバイト文字列関数の各々の機能と相関関係について
相関図
マルチバイト文字列関数の個々の機能及び設定ディレクティブの機能の詳細については、PHPマニュアル等を参照して下さい。
※ブラウザによりレイアウトが崩れる場合は、ページのソースからご覧下さい。
HTTP入力 GET POST Cookie 文字列 リスト ↓ ↓ ↓ mbstring.http_input:HTTP入力文字の文字コードを検出、内部文字エンコーディングに変換 *3 ↑ │ │ │*1 └→mb_http_input():検出結果出力*5 │ │ │ mbstring.http_encoding_translation:検出および変換機能のスイッチ │ ↓内部文字エンコーディングに変換 mbstring関数 ←───────┬──mbstring.internal_encoding←┬mbstring.language │ ↑↓ │↑↓ mb_decode_mimeheader()←┘ └┴mb_internal_encoding()│└┴mb_language() │ mb_encode_mimeheader()*6←────────────────┤ │ mb_send_mail()*2 ←┐←──────────────┘ │ mb_detect_encoding()*3 ←┴mbstring.detect_order*3 ↑↓ └┴mb_detect_order()*3 ↓ HTTPヘッダ MIMEタイプ ←default_mimetype 文字エンコード ←default_charset ヘッダ ←header() ↓ 出力バッファ output_handler ←───mb_output_handler() 設定 │ ↑ ob_start() ←───────┘ │ │ ob_end_flush() mbstring.http_output:指定した文字コードに変換して出力*4 ↑│ ↑↓ │ ││ └┴mb_http_output() │ │↓ ├→(output_handlerで設定した関数による処理) ├←┘ ↓ HTTP出力
*: php.ini内の設定ディレクティブをスクリプト中で変更するにはini_set(<パラメータ名>, <値>);で変更する。
*1: HTMLフォームでenctypeがmultipart/form-dataに設定され、mbstring.encoding_translationにOnが指定されている場合、POSTデータの変数とアップロードされたファイルの名前の文字エンコーディングも、内部文字エンコーディングに変換される。*1
*2: mb_send_mail()を利用する場合は何の文字コードで受け付けて、何の文字コードで出力するかを意識すること。
*3: "auto"を設定した場合は、ASCII, JIS, UTF-8, EUC-JP, SJISの順に検出を試みる。
*4: Content-Typeが”text/html”の場合のみ有効。(image/jpegなどの場合は自動で無効になる。)
*5: mbstring.http_inputはPHPの初期化時に実行される機能であるため、スクリプト中からは設定変更できない。
*6: mb_encode_mimeheader()は、内部文字エンコーディングでエンコードされた文字列が渡されることを前提としているので、事前に引き渡す文字列のエンコーディングを内部文字エンコーディングとマッチさせておく。
mbstring.languageとmbstring.internal_encodingの自動設定について
php.iniで、両方とも設定しなかった場合(デフォルト値)
mbstring.language = neutral
mbstring.internal_encoding = ISO-8859-1
mbstring.language = Japanese(ja)でmbstring.internal_encodingは設定なしの場合
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.language = English(en)でmbstring.internal_encodingは設定なしの場合
mbstring.language = English
mbstring.internal_encoding = ISO-8859-1
mbstring.language = uniでmbstring.internal_encodingは設定なしの場合
mbstring.language = uni
mbstring.internal_encoding = UTF-8
mb_language()を使用して言語設定した場合
⇒mbstring.internal_encodingの値は自動的に変更されることはなく、デフォルトのmbstring.internal_encodingの設定のまま。
mb_send_mail()について
mbstring.languageの言語設定とそれにより設定されるメールシステム用エンコーディング
mbstring.language = neutralの場合
charset = UTF-8Transfer-Encoding = BASE64
mbstring.language = Japanese(ja)の場合
charset = ISO-2022-JPTransfer-Encoding = 7bit
mbstring.language = English(en)の場合
charset = ISO-8859-1Transfer-Encoding = quoted-printable
mbstring.language = uniの場合
charset = UTF-8Transfer-Encoding = BASE64
参考文献
PHPの文字化けを本気で解決する - ぎじゅっやさん
mbstring.http_outputによる画像データへの影響 - 教えて!goo
mbstring.languageの罠 - PHPの種 ブログ
mb_encode_mimeheaderの都市伝説を検証する - CPA-LABテクニカル
- 作者: 大垣靖男
- 出版社/メーカー: 技術評論社
- 発売日: 2005/04/14
- メディア: 大型本
- 購入: 4人 クリック: 33回
- この商品を含むブログ (18件) を見る