ホームページ > バックエンド開発 > PHPチュートリアル > PHP で遊ぶ(1) - PHP での中国語文字列の長さの処理: strlen と mb_strlen

PHP で遊ぶ(1) - PHP での中国語文字列の長さの処理: strlen と mb_strlen

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

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>
ログイン後にコピー

このコードの出力は次のとおりです: 名前の長さは次のとおりです: 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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート