PHPのstrlenとmb_strlen

アバター
うむー
記事: 0
登録日時: 14年前
住所: 茨城県
連絡を取る:

PHPのstrlenとmb_strlen

投稿記事 by うむー » 14年前

TwitterBotをPHPでつくっていたり、ブラウザでTwitterのTLを見れるようにPHPでプログラム組んでたりで、よくUTF-8環境でPHPプログラミングはやっているのですが、最近になって初めて知ったことを1つ。備忘録もかねて。

strlen()関数と、mb_strlen()関数について。

どちらも文字列の文字数を得るための関数なのですが、以下のプログラムをideoneで走らせるとおかしな結果になります。

CODE:

<?php
 
echo strlen("ABCDE")."\n";
echo strlen("あいうえお")."\n\n";
 
echo mb_strlen("ABCDE")."\n";
echo mb_strlen("あいうえお")."\n";
実行結果:http://ideone.com/A29jH


1バイト文字は普通に1文字として返してくれるのですが、2バイト文字は何故か3文字として返されてしまっています。
まあこれ、正解は「mb_strlenで文字エンコーディングを指定」する、ってことなんですが、これがずーっと分からなかった私…(´・ω・`)
strlenはバイト数、mb_strlenは文字数を返すと覚えてしまっていたため(思えば、これはどこで覚えたんだろう…汗)
mb_strlenに第二引数の指定が必要だったってこと自体知らなかったんです…。おお、はずいはずい……。

CODE:

<?php
 
echo strlen("ABCDE")."\n";
echo strlen("あいうえお")."\n\n";
 
echo mb_strlen("ABCDE","UTF-8")."\n";
echo mb_strlen("あいうえお","UTF-8")."\n";
実行結果:http://ideone.com/MsbC2

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前

Re: PHPのstrlenとmb_strlen

投稿記事 by softya(ソフト屋) » 14年前

名前は忘れてますが、デフォルトの文字コードを変更する関数があるので、それを使えばいちいち指定しなくて良いですよ。