jisとiso-2022-jpの違い

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”);
// 漢字ひらがなカタカナハンカク

そもそもiso-2022-jpとは

JIS規格によって規定されている日本語の文字コードの一つ。
iso-2022-jpは7ビットで表現されているため、欧米などで開発された8ビット目を無視する電子メールシステムでも問題なく使用することができる。
このため、電子メールでの日本語送受信はiso-2022-jpによって行うことが事実上の標準となっている。

DETAILS

http://www.systemexpress.co.jp/php/iso-2022-jp.html

Leave a Reply

Your email address will not be published. Required fields are marked *