mb_strlen()を使うときはエンコードも指定する

公開

スポンサーリンク

エンコードはトラブルの元。phpで全角半角問わず文字数を数えてくれるmb_strlen()は大変便利な関数ですが、文字エンコーディングを指定しておかないと正確な数字を返してくれないことがあります。

$str = "全角文字";
$num = mb_strlen( $str );
var_dump( $num );//int(4)

mb_strlen()は第1引数に文字数を調べたい文字列、第2引数に文字エンコーディングを指定します。第2引数は省略可能で、指定しなくても問題なく作動してくれる場合が多いようです。ネット上でも省略している例が多いように見えます。

ですが、phpの内部エンコーディングと文字列のエンコーディングが異なっている場合に、正確な数値を返せなくなるようです。上の例で言えば、int(4)ではなくint(12)を返してきたりすることになります。

思わぬトラブルを防ぐために、mb_strlen()を使うときは必ず第2引数のエンコードも指定した方が良いでしょう。

$str = "全角文字";
$num = mb_strlen( $str , "utf-8" );
var_dump( $num );//int(4)

こちらがより推奨される使い方です。

mb_strlen()に限らず、phpの2バイト文字を扱うmb系の関数は、オプションで文字エンコーディングが指定できるものがほとんどです。文字列を指定した数で丸めるmb_strimwidth()や文字列の一部だけを取り出すmb_substr()などよく使う文字列関数の多くで、省略可能な引数として文字エンコーディングが指定できるようになっています。基本的に、必ず文字エンコーディングは指定するようにしましょう。

スポンサーリンク


Comment