PHP で遊ぶ (1)---PHP での中国語の文字列長の扱い: strlen と mb_strlen
注: この記事は編集者のオリジナルです。転載する場合は出典を明記してください: http://blog. csdn.net/u012116457/article/details/42536039
今日から正式に PHP の学習を開始しましたが、編集者が PHP を使用する際に特別な注意が必要な点を偶然発見しました。
例:
<html><meta charset="utf-8"><body><?php $name="鸣人"; print "姓名的长度为:".strlen($name);?></body></html>
まず、この問題が発生する理由について説明します。PHP の組み込み文字列長関数 strlen() は、中国語の文字列を正しく処理できません。文字列が占有するバイト数のみを取得します。 GB2312 中国語エンコードの場合、strlen によって取得される値は中国語の文字数の 2 倍ですが、UTF-8 エンコードされた中国語の場合、その差は 3 倍になります (UTF-8 エンコードでは、1 つの中国語文字は 3 バイトを占めます)。
中国語の文字を含む文字列の長さを計算するために strlen 関数を使用する必要がある場合、次の例は インターネット :
<?php function chinesesubstr($str,$start,$len) { $strlen=$start+$len; for($i=0;$i<$strlen;$i++) { if(ord(substr($str,$i,1))>0xa0) { $tmpstr.=substr($str,$i,2); $i++; } else $tmpstr.=substr($str,$i,1); } return $tmpstr; }?>
<html><meta charset="utf-8"><body><?php $name="鸣人"; print "姓名的长度为:".mb_strlen($name,"utf-8");?></body></html>
名前の長さは 2 です
mb_strlen の使用法も同様です最初の 2 つのオプションのパラメーターを除き、strlen に変換されます。文字エンコーディングを指定するために使用されます。mb_strlen は PHP のコア関数ではないことに注意してください。これを使用する前に、php_mbstring.dll が php.ini にロードされていることを確認する必要があります。行「extension=php_mbstring.dll」が存在する場合と存在しない場合はコメントアウトすると、未定義の関数の問題が発生します。