///

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

wrote :

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

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'); // 文字列のエンコード

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

川上 武範(かわかみ たけのり)
1975年生。シンプルシンプルデザイン代表兼Webクリエイター。たびのとWebサイト運営責任者。

企画からサイト設計、正しいマークアップを意識したWebサイト制作やユーザー視点の情報設計を得意としている。

シンプルシンプルデザイン
たびのと
twitter : たけたけ@OnlyTwo

メディア掲載
2016年10月25日 レバテックフリーランスの記事「自作Webサービス記事紹介まとめ」でサイト内の記事「Webサービス「たびのとTOKYO」を作ってみました」を紹介していただきました。