php使用自訂函數實作統計中文字串長度的方法實例詳解

怪我咯
發布: 2023-03-12 14:46:02
原創
1430 人瀏覽過

這篇文章主要介紹了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碼編碼規則是這樣的:每個漢字由兩個位元組構成,第一個位元組的範圍從0XA1-0XFE,共96種。第二個位元組的範圍分別為0XA1-0XFE,共96種。利用這兩個位元組共可定義出 96 * 96=8836種漢字。實際共有6763個漢字。

BIG5碼編碼規則是這樣的:每個漢字由兩個位元組構成,第一個位元組的範圍從0X81-0XFE,共126種。第二個位元組的範圍分別為0X40-0X7E,0XA1-0XFE,共157種。也就是說,利用這兩個位元組共可定義出 126 * 157=19782種漢字。這些漢字的一部分是我們常用來的,如一、丁,這些字我們稱為常用字,其BIG5碼的範圍為0XA440-0XC671,共5401個。較不常用的字,如濫、調,我們稱為次常用字,範圍為 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.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板