Maison  >  Article  >  développement back-end  >  Exemple détaillé de la façon dont PHP utilise des fonctions personnalisées pour compter la longueur des chaînes chinoises

Exemple détaillé de la façon dont PHP utilise des fonctions personnalisées pour compter la longueur des chaînes chinoises

怪我咯
怪我咯original
2017-07-04 12:03:101432parcourir

Cet article présente principalement la méthode de phpfonction personnalisée pour obtenir des statistiques sur la longueur du chinoischaîne Il résume et analyse la détermination, l'encodage et le fonctionnement de PHP liés au chinois dans le. sous forme d'exemples. Pour des compétences opérationnelles, les amis dans le besoin peuvent se référer à

Cet article décrit l'exemple d'utilisation des fonctions personnalisées PHP pour compter la longueur des chaînes chinoises. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Les caractères chinois sont calculés comme 2 caractères et les caractères anglais sont calculés comme 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;
}

Autre : PHP détermine la longueur des caractères : chinois, anglais, chiffres.

Il existe de nombreuses façons de procéder. Enregistrez-en un simple.

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

L'inconvénient est que vous devez installer la bibliothèque mb.

Cependant, il reste encore quelques problèmes à résoudre.

Les règles de codage du code GB sont les suivantes : chaque caractère chinois se compose de deux octets, le premier octet va de 0XA1 à 0XFE, soit un total de 96 types. La plage du deuxième octet est respectivement 0XA1-0XFE, soit un total de 96 types. Un total de 96 * 96 = 8836 caractères chinois peuvent être définis à l'aide de ces deux octets. Il y a en réalité 6763 caractères chinois au total.

Les règles de codage du code BIG5 sont les suivantes : chaque caractère chinois se compose de deux octets, le premier octet va de 0X81 à 0XFE, soit un total de 126 types. La plage du deuxième octet est 0X40-0X7E, 0XA1-0XFE, soit un total de 157 types. En d’autres termes, un total de 126 * 157 = 19 782 caractères chinois peuvent être définis à l’aide de ces deux octets. Certains de ces caractères chinois sont couramment utilisés par nous, comme Yi et D. Ces caractères sont appelés caractères couramment utilisés et leurs codes BIG5 vont de 0XA440 à 0XC671, soit un total de 5 401 caractères. Les caractères moins couramment utilisés, tels que "tan" et "diao", sont appelés caractères moins couramment utilisés, allant de 0XC940 à 0XF9FE, soit un total de 7652 caractères. Le reste est constitué de caractères spéciaux .

Une approche plus sûre.

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

Enfin, ce qui suit est correct et universel !

Code :

/**作用:统计字符长度包括中文、英文、数字
* 参数:需要进行统计的字符串、编码格式目前系统统一使用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;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn