PHPで遊んでみる(1) - PHPで中国語の文字列の長さを処理する:strlenとmb_strlen

WBOY
リリース: 2016-06-23 13:41:58
オリジナル
1100 人が閲覧しました

注: この記事は編集者のオリジナルです。転載する場合は出典を明記してください: http://blog.csdn.net/u012116457/article/details/42536039

今日から正式に PHP の学習を始めましたが、編集者です。よく考えたらPHPを使う上で注意が必要な箇所を発見しました。

例:

<html><meta charset="utf-8"><body><?php $name="鸣人"; print "姓名的长度为:".strlen($name);?></body></html>
ログイン後にコピー

このコードの出力は次のとおりです: 名前の長さは 6 です

まず、この問題が発生する理由について説明します: 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; }?>
ログイン後にコピー

ただし、これ以外にも、 mb_strlen 関数を完全に使用できます 計算するには:

<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」という行が含まれていることを確認してください。 " が存在し、コメントアウトされていない場合は、「未定義の関数の問題」が表示されます。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート