編寫PHP程式檢查字串中的中文字元個數的執行個體分享,_PHP教程

來源:互聯網
上載者:User

編寫PHP程式檢查字串中的中文字元個數的執行個體分享,


有時候我們需要計算一個字串中包含的字數,對於純英文字串,字數等於字串長度,用
strlen函數即可獲得,但如果字串中包含中文怎辦?mb_strlen可以實現,但不幸沒裝擴充,那就自己實現一下吧。

php有一個擴充一般是必裝的,我們可以使用mb_strlen來擷取字串中的字數,用法一般如下:

$len = mb_strlen("你是我的小蘋果","utf-8");


如願獲得字串長度:7.

如果沒裝mb擴充呢?自己實現一下吧。

我們要先明白一個事實:字串是由字元組成的,而字元是由位元組表示的,每個英文字元是一個位元組,對應一個ascii碼,英文字元的ascii碼是小於128的,也就是十六進位的 0x80 .當一個位元組的ascii碼超過了127,那就說明當前位元組不是一個完整的字元。

比如

$str = "你是我的小蘋果";

中的$str{0}可以取到第一個位元組,我們來看一下它是啥:

php > $str = "你是我的小蘋果";php > echo $str{0};�

是個亂碼,它只是
複製代碼 代碼如下:你
字的位元組之一,也就是說,
複製代碼 代碼如下:你
這個字元是由超過一個位元組組成的,我們這樣試試:

php > echo $str{0}.$str{1}.$str{2};


可以看到,將三個位元組連在一起輸出,就成了一個完整的
複製代碼 代碼如下:你

至於這裡為什麼是三個位元組,而不是兩個或4個?這個取決於字串的編碼,我這裡控制台預設是utf8編碼的,在PHP中,一個utf8字元是用三個位元組表達的,如果是gbk編碼,則會是兩個位元組。至於編碼和位元組的關係,這個話題比較大,一篇說不完,請參考這篇文章:字元編碼筆記:ascii,unicode和utf8 。

知道了這些,我們就可以自己編寫一個字數檢查的函數了,大致流程如下:

1.for迴圈遍曆位元組 2.判斷位元組編碼是否 >= 0x80,是的話跳過N個位元組

我寫了個簡單的函數,可以判斷gbk或utf8字串的長度,僅供參考:

<?phpfunction mbstrlen($str,$encoding="utf8"){  if (($len = strlen($str)) == 0) {    return 0;  }  $encoding = strtolower($encoding);  if ($encoding == "utf8" or $encoding == "utf-8") {    $step = 3;  } elseif ($encoding == "gbk" or $encoding == "gb2312") {    $step = 2;  } else {    return false;  }  $count = 0;  for ($i=0; $i<$len; $i++) {    $count++;    //如果位元組碼大於127,則根據編碼跳幾個位元組    if (ord($str{$i}) >= 0x80) {      $i = $i + $step - 1;//之所以減去1,因為for迴圈本身還要$i++    }  }  return $count;}echo mbstrlen(iconv("utf-8","gbk","你是我的小蘋果"),"gbk");echo mbstrlen("你是我的小蘋果");

您可能感興趣的文章:

  • PHP Echo字串的串連格式
  • PHP使用數組依次替換字串中匹配項
  • PHP中substr_count()函數擷取子字串出現次數的方法
  • PHP中strncmp()函數比較兩個字串前2個字元是否相等的方法
  • PHP中strnatcmp()函數“自然排序演算法”進行字串比較用法分析(對比strcmp函數)
  • PHP中strcmp()和strcasecmp()函數字串比較用法分析
  • PHP中substr函數字串截取用法分析
  • PHP中addslashes()和stripslashes()實現字串轉義和還原用法執行個體
  • 詳解 PHP加密解密字串函數附源碼下載
  • PHP指定截取字串中的中英文或數字字元的執行個體分享

http://www.bkjia.com/PHPjc/1111912.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1111912.htmlTechArticle編寫PHP程式檢查字串中的中文字元個數的執行個體分享, 有時候我們需要計算一個字串中包含的字數,對於純英文字串,字數等於字串...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.