strlen()関数と、mb_strlen()関数について。
どちらも文字列の文字数を得るための関数なのですが、以下のプログラムをideoneで走らせるとおかしな結果になります。
<?php
echo strlen("ABCDE")."\n";
echo strlen("あいうえお")."\n\n";
echo mb_strlen("ABCDE")."\n";
echo mb_strlen("あいうえお")."\n";
1バイト文字は普通に1文字として返してくれるのですが、2バイト文字は何故か3文字として返されてしまっています。
まあこれ、正解は「mb_strlenで文字エンコーディングを指定」する、ってことなんですが、これがずーっと分からなかった私…(´・ω・`)
strlenはバイト数、mb_strlenは文字数を返すと覚えてしまっていたため(思えば、これはどこで覚えたんだろう…汗)
mb_strlenに第二引数の指定が必要だったってこと自体知らなかったんです…。おお、はずいはずい……。
<?php
echo strlen("ABCDE")."\n";
echo strlen("あいうえお")."\n\n";
echo mb_strlen("ABCDE","UTF-8")."\n";
echo mb_strlen("あいうえお","UTF-8")."\n";