mb_convert_kanaで文字コード指定しないと誤変換する場合がある
前提として、phpはUTF-8で書いてます。
で、以下のようなphpを実行したとします。
<?php $a = "aaa(bbb)ccc"; // 全角の括弧 var_dump(mb_detect_encoding($a)); $b = mb_convert_kana($a, "as"); var_dump(mb_detect_encoding($b));
結果は。
string(5) "UTF-8" string(6) "EUC-JP"
なぜか、EUC-JPとして判別されてますし、$bの内容を表示すると全角括弧が文字化けしてしまっています。
対応策として、短い文字列やユーザ入力の文字列を渡す場合には、第三引数に文字コードを明示的に記入する。
<?php $a = "aaa(bbb)ccc"; var_dump(mb_detect_encoding($a)); $b = mb_convert_kana($a, "as", "UTF-8"); var_dump(mb_detect_encoding($b));
結果。
string(5) "UTF-8" string(5) "ASCII"
ある案件で、外部から受け取ったShift_JISのXMLをパースして、どーのこーのというのを書いていて、上記部分にはまった。
てっきりパース部分に問題があるかと思ってしまった。
追記
UTF-8の設定が、httpd.confレベルでApacheだけで、コマンドラインではEUC-JPで動いていました。
d:id:maru_cc:20080212:1202831190