俺#

新潟市でIT業を営むおっさんのブログ。

PHPのmbstring.substitute_characterの罠

シフトJISで書いたPHPソースコードの中で、

mb_detect_encoding("あいうえお");

が「EUC-JP」を返して来るので困っていると相談された。そもそも何故ソースコードSJISで書くのかと聞くと、EUC-JPで書いたソースコードを動かすと何をやってもボロボロと文字化けが起こるので試行錯誤していたのだとか。まぁ、原因はmbstringの設定周りだろうと思い確認してみたら、

mbstring.substitute_character=SJIS

という設定によって、ソースを常にSJISと見なして、読み込む時に内部コード(EUC-JP)に変換してくれていたのであった。へ〜、こんな設定もあるのか〜。そりゃEUC-JPのソースはうまく動かなそうだよなぁ(苦笑

しかし「mbstring.http_output」は「pass」になってるので、ソースはSJISで書かなきゃいけないのに、吐き出すHTMLはcharsetをEUC-JPにする必要があるっぽい。mb_http_output()でSJISを明示すればいいのかもしれんが、どうも気持ち悪い設定だな(^^;

PHPでトラブったらまずはphpinfo();だと再認識した次第。