[PHP] mb_strlenで文字数が正しくカウントされない原因

自由が丘で働くWeb屋のブログ

[PHP] mb_strlenで文字数が正しくカウントされない原因

multibyte

日本語の様なマルチバイト(mb)を含む文字列を対象とした関数、mb_strcut()mb_strimwidth()mb_strlen()mb_substr()などを使用する際、文字数が正しくカウントされない事があります。
原因は以下から。

mb_strlenで文字数が正しくカウントされない原因

マルチバイトを含む文字列を対象とした関数を使用する際は、対象となる文字列のエンコードを指定する必要があります。

<?php
//文字列「$str」のエンコードはSJIS
$str = 'カウントする文字列';
var_dump(mb_strlen($str)); //文字コードを指定しない場合…(1)
var_dump(mb_strlen($str, 'SJIS')); //文字コードを指定した場合…(2)
//文字列をUTF8に変更
$str = mb_convert_encoding($str, 'UTF-8', 'SJIS');
var_dump(mb_strlen($str)); //文字コードを指定しない場合…(3)
var_dump(mb_strlen($str, 'UTF-8')); //文字コードを指定した場合…(4)
?>

結果は下記の通り。

int(15) //(1)の結果、文字数は正しくない
int(9) //(2)の結果、文字数は正しい
int(18) //(3)の結果、文字数は正しくない
int(9) //(4)の結果、文字数は正しい
 
カテゴリー:Webシステム開発
タグ:
2011年2月3日 20時18分
 

関連記事

 

コメントを書く

(C) 自由が丘で働くWeb屋のブログ