ようこそゲストさん

CPA-LABテクニカル

2008/06/30(月) PHPの日本語デフォルトコードはEUC-JP

php.ini が
mbstring.language = Japanese
であり、かつ、mbstring.internal_encodingが未設定の場合、PHPは、mbstring.internal_encodingが、文字コードEUC-JPであるとみなして動作する。*1
ちなみに、languageの設定さえない場合は、ISO-8859-1のようだ。

時代は、UTF-8だと思いますので、UTF-8でソースコードを書く時には、
mbstring.internal_encoding = UTF-8
を忘れずに。

可搬性を重視した場合

他の環境でも動作させることを考えれば、これらの項目は、php.iniで設定するのでなく、自分のスクリプトの初期設定で行うほうがよい。だって、レンタルサーバーであれば、languageの設定がjapaneseと保証されているわけでもないし、文字コードもphp.iniでどう設定されているかは、千差万別(のはず)だからだ。
よって、日本語のコードであれば、必ず初期設定スクリプトで、
mb_language( 'ja' );
mb_internal_encoding( 'UTF-8' );
を設定しましょう。

なぜ今?

何を当たり前のことをお思いでしょうけど、mbstring.internal_encodingを未設定、またはEUC-JPのままで、UTF-8でコードを書くと思わぬ誤動作が生まれる可能性がある、ということで。。。。次回に続く。

*1 : PHP5.2.4 PHP_RINIT_FUNCTION mbstring-mbstring.c


名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/0154/tb/
  • mb_encode_mimeheaderの都市伝説を検証する CPA-LABテクニカル spok
    ■mb_encode_mimeheader都市伝説mb_encode_mimeheaderは、なんか使いにくい。文字化けする。とあまり良い評判を聞きません。私も、「使うのはちょっと怖いな」と思っていました。しかし、mb_encode_mimeheaderは...