制作ブログ Web制作マークアップphp文字数を知る(javascriptでいうところのlength)→ mb_strlen

文字数を知る(javascriptでいうところのlength)→ mb_strlen

ちょっとハマってしまったので備忘録。

javascriptの「length」に相当する、文字列の長さを得るphpの関数に「strlen」「mb_strlen」があることを知る。
strlenはバイト数を。mb_strlenは文字数を取得できる。
なるほど。mb_strlenで楽勝だな、と思ったが・・・。

mb_strlen(‘あ’);

当然「1」が返ってくると思ったけど、実際は「3」が返ってきた。しかも環境によって返ってくる値が「3」だったり「2」だったり「1」だったり・・。
なぜ?
ググる。どうやら内部エンコーディングが文字列のエンコードと異なっている時に想定外の値が返ってくることが分かった。対応方法がいろいろ書かれていたが、「あ」が「2」ではなく「1」がほしい。

function getLength($str) {
// 内部エンコーディング取得
$org_encode = mb_internal_encoding();
// 内部エンコーディングを文字列のエンコードに変換
mb_internal_encoding("utf-8");
$num = mb_strlen($str);
// 内部エンコーディングを元に戻す
mb_internal_encoding($org_encode);
return $num;
}
getLength('あ');

「よし」と思ってたら、もっとシンプルな解決方法。

mb_strlen(‘あ’, ‘utf-8’); // 文字列のエンコード

って最初に気付きたかった・・・。