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.detect_orderで指定された順に、入力文字のエンコーディングを検出し、
  • mbstring.languageで設定された言語設定に基づき、ヘッダと本文をエンコードする。
mbstring.languageの言語設定とそれにより設定されるメールシステム用エンコーディング

mbstring.language = neutralの場合
charset = UTF-8
Transfer-Encoding = BASE64

mbstring.language = Japanese(ja)の場合
charset = ISO-2022-JP
Transfer-Encoding = 7bit

mbstring.language = English(en)の場合
charset = ISO-8859-1
Transfer-Encoding = quoted-printable

mbstring.language = uniの場合
charset = UTF-8
Transfer-Encoding = BASE64