ホームページ  >  記事  >  バックエンド開発  >  PHPカスタム関数を使って中国語の文字列の長さをカウントする方法を詳しく解説

PHPカスタム関数を使って中国語の文字列の長さをカウントする方法を詳しく解説

墨辰丷
墨辰丷オリジナル
2018-05-23 17:25:251800ブラウズ

この記事では、PHP カスタム関数を使用して中国語の文字列の長さをカウントする方法を主に紹介し、中国語の判定、エンコード、操作に関する PHP の操作スキルをサンプルの形式でまとめて分析します。中国語の文字は 2 文字として計算されます 英語の文字は 1 文字として計算されます

code


/**
* 可以统计中文字符串长度的函数
*
*/
function abslength($str)
{
  $len=strlen($str);
  $i=0;
  while($i<$len)
  {
    if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i]))
    {
      $i+=2;
    }
    else
    {
      $i+=1;
    }
  }
  return $i;
}

もう 1 つ: PHP は文字の長さを決定します: 中国語、英語、数字。

これを行うには多くの方法があります。 簡単なものを記録します。

mb_strlen($str, &#39;GBK&#39;);

欠点は、mb ライブラリをインストールする必要があることです。

しかし、まだ解決すべき問題がいくつかあります。

GB コードのエンコード規則は次のとおりです。各漢字は 2 バイトで構成され、最初のバイトは 0XA1 ~ 0XFE の範囲で、合計 96 種類です。 2バイト目の範囲は0XA1~0XFEの合計96種類です。これら 2 バイトを使用して、合計 96 * 96 = 8836 個の漢字を定義できます。実は漢字は全部で6763字あります。

BIG5 コードのエンコード規則は次のとおりです。各漢字は 2 バイトで構成され、最初のバイトの範囲は 0X81 ~ 0XFE で、合計 126 種類です。 2バイト目の範囲はそれぞれ0X40~0X7E、0XA1~0XFEの合計157種類です。つまり、これら 2 バイトを使用して、合計 126 * 157 = 19782 個の漢字を定義できます。これらの漢字の一部は、私たちがよく使用する Yi や D などです。これらの文字は常用文字と呼ばれ、BIG5 コードの範囲は 0XA440 から 0XC671 まで、合計 5401 文字です。 「tan」や「diao」など、あまり使用されない文字はあまり使用されない文字と呼ばれ、0XC940 から 0XF9FE までの合計 7652 文字で、残りは一部の特殊文字です。

より安全な方法。

function StrLenW($str)
{
    $count = 0;
    $len = strlen($str);
     for($i=0; $i<$len; $i++,$count++)
       if(ord($str[$i])>=128)
        $i++;
     return $count;
}

最後に、以下は正しくて普遍的です!

コード:

/**作用:统计字符长度包括中文、英文、数字
* 参数:需要进行统计的字符串、编码格式目前系统统一使用UTF-8
* 修改记录:
   $str = "kds";
  echo sstrlen($str,&#39;utf-8&#39;);
* */
function sstrlen($str,$charset) {
    $n = 0; $p = 0; $c = &#39;&#39;;
    $len = strlen($str);
    if($charset == &#39;utf-8&#39;) {
      for($i = 0; $i < $len; $i++) {
        $c = ord($str{$i});
        if($c > 252) {
          $p = 5;
        } elseif($c > 248) {
          $p = 4;
        } elseif($c > 240) {
          $p = 3;
        } elseif($c > 224) {
          $p = 2;
        } elseif($c > 192) {
          $p = 1;
        } else {
          $p = 0;
        }
        $i+=$p;$n++;
      }
    } else {
      for($i = 0; $i < $len; $i++) {
        $c = ord($str{$i});
        if($c > 127) {
          $p = 1;
        } else {
          $p = 0;
      }
        $i+=$p;$n++;
      }
    }
    return $n;
}

上記がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連する推奨事項:

PHP

ファイルを作成し、そのファイルにデータを書き込み、実装コードを上書きして追加する_phpスキル

PHP

文字列に別の文字列メソッドが含まれているかどうかを単純に判断する_phpヒント
php form_phpの同じ名前を持つ複数の入力要素の値を取得するCIコード

以上がPHPカスタム関数を使って中国語の文字列の長さをカウントする方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。