スタッフブログ

  • 最新配信
  • RSS

PHPでマルチバイトの文字数を数える

 : PHP 2008/10/8 21:58

Blogger's Avatar

PHPで文字列の文字数を数える場合,strlen関数を利用して以下のように書きます.
php -r '$re = strlen("テスト"); var_dump($re);'
「テスト」は3文字なので3が返るはずです.しかし,このコードの実行結果は9が返ります. これはstrlenがマルチバイトを考慮していない為です.strlenの場合,文字数というよりはバイト数を表示しています. PHPでマルチバイト文字列をカウントするにはmbstringに含まれるmb_strlen関数を使います.以下はmb_stringを利用した場合のコードです.
php -r '$re = mb_strlen("テスト"); var_dump($re);'
しかし私の環境では,このコードを実行してもやはり9が返ってきました.mb_strlenは与えられた文字列を内部エンコーディングでカウントします.内部エンコーディングはmb_internal_encoding()関数を利用する事で確認できるのですが,結果はISO-8859-1でした.サーバ自体のlangはUTF-8なのであっていません.そこで以下のように書きかえました.
php -r '$re = mb_strlen("テスト", "UTF-8"); var_dump($re);'
これでようやく3という数字がでました.mb_strlenは第二引数を指定する事で任意の文字コードとしてカウントできる為,これを利用する事でマルチバイト文字を正しくカウントできるようになります. 内部エンコーディングを正しく設定しておくのもこうならない為の対策の一つではありますが,それに加えて,mb_strlenを利用する場合は明示的にエンコードを指定しておいたほうが間違いがなくなって良いかもしれません.

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.