mb_convert_encoding関数においてiso-2022-jpとjisでは意味が違うらしい。
結論から言うとiso-2022-jpは半角カナに対応しておらずjisは対応している。
だからmb_convert_encoding($str,"jis")と書くほうが無難。
さらにmb_encode_mimeheaderでエンコードするときもmb_encode_mimeheader($str,"jis")と書いてあげないと半角カナが化ける結果になる。
これに気づかないとメール送信などではまる><
// 半角カナが無いエンコードでは同じ結果 echo base64_encode(mb_convert_encoding("漢字ひらがなカタカナ","iso-2022-jp")); // GyRCNEE7eiRSJGkkLCRKJSslPyUrJUobKEI= echo base64_encode(mb_convert_encoding("漢字ひらがなカタカナ","jis")); // GyRCNEE7eiRSJGkkLCRKJSslPyUrJUobKEI= // 半角カナがあるエンコードでは違う結果 echo base64_encode(mb_convert_encoding("漢字ひらがなカタカナハンカク","iso-2022-jp")); // GyRCNEE7eiRSJGkkLCRKJSslPyUrJUobKEI/Pz8/ echo base64_encode(mb_convert_encoding("漢字ひらがなカタカナハンカク","jis")); // GyRCNEE7eiRSJGkkLCRKJSslPyUrJUobKElKXTY4GyhC // 逆の処理をするとiso-2022-jpは化ける echo mb_convert_encoding(base64_decode("GyRCNEE7eiRSJGkkLCRKJSslPyUrJUobKEI/Pz8/"),"utf-8","iso-2022-jp"); // 漢字ひらがなカタカナ???? echo mb_convert_encoding(base64_decode("GyRCNEE7eiRSJGkkLCRKJSslPyUrJUobKElKXTY4GyhC"),"utf-8","jis"); // 漢字ひらがなカタカナハンカク // jisにエンコードたものをiso-2022-jpからデコードすると化けない echo mb_convert_encoding(base64_decode("GyRCNEE7eiRSJGkkLCRKJSslPyUrJUobKElKXTY4GyhC"),"utf-8","iso-2022-jp"); // 漢字ひらがなカタカナハンカク
JIS規格によって規定されている日本語の文字コードの一つ。
iso-2022-jpは7ビットで表現されているため、欧米などで開発された8ビット目を無視する電子メールシステムでも問題なく使用することができる。
このため、電子メールでの日本語送受信はiso-2022-jpによって行うことが事実上の標準となっている。
Copyright(C) systemexpress.co.jp All Rights Reserved. Author Takayuki Yukawa