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

PHP がカスタム関数を使用して中国語の文字列の長さをカウントする方法の詳細な例

怪我咯
怪我咯オリジナル
2017-07-04 12:03:101375ブラウズ

この記事では主に、中国語文字列の長さの統計を実現するためのphpカスタム関数の方法を紹介し、phpの中国語判定、エンコード、操作関連の操作スキルをまとめて分析するための例を組み合わせています

この記事の例では、PHP カスタム関数を使用して中国語の文字列の長さをカウントする方法を説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

漢字は 2 文字として計算され、英語の文字は 1 文字として計算されます

コード

/**
* 可以统计中文字符串长度的函数
*
*/
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;
}

別: 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 中国語 Web サイトの他の関連記事を参照してください。

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