mb_substr マルチバイト部分文字列の罠

UTF-8環境で奇妙なトラブルがあったのですが、

$str = "あいう";
echo mb_substr($str,0,1); // 「あ」だけ表示するはずが・・・文字化け

これで0番目から1文字取り出せるはずが わけのわからない文字コードが出力されて文字化けしてしまいました。
文字によっては0,2にしてみたら表示されたりされなかったり不安定です。

で、3番目の引数があったことを思い出して

$str = "あいう";
echo mb_substr($str,0,1,"utf-8"); // 「あ」と表示されました!

に変えると一気に解決しました!なるほど内部エンコードEUCなのでUTF-8で処理するための指定がいるんですねぇ。
気づかなかった時間を損した気分。

どうやら mb_substr() だけに限らず mb_strcut() などでも同様のようです。