注: この記事は編集者のオリジナルです。転載する場合は出典を明記してください: 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 は PHP のコア関数ではないことに注意してください。これを使用する前に、php_mbstring.dll が php.ini にロードされていることを確認する必要があります。つまり、「extension=php_mbstring.dll」という行が含まれていることを確認してください。 " が存在し、コメントアウトされていない場合は、「未定義の関数の問題」が表示されます。