mb_convert_kanaで文字コード指定しないと誤変換する場合がある

前提として、phpUTF-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_JISXMLをパースして、どーのこーのというのを書いていて、上記部分にはまった。
てっきりパース部分に問題があるかと思ってしまった。


追記
UTF-8の設定が、httpd.confレベルでApacheだけで、コマンドラインではEUC-JPで動いていました。
d:id:maru_cc:20080212:1202831190