91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用PHP實現檢查字符串中的中文字符個數

發布時間:2021-07-01 10:16:52 來源:億速云 閱讀:154 作者:chen 欄目:開發技術

本篇內容介紹了“如何用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字符串的長度,僅供參考:

<?php

function 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實現檢查字符串中的中文字符個數”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

铁力市| 东平县| 卫辉市| 丹东市| 宝应县| 平谷区| 天峨县| 拉孜县| 台州市| 来凤县| 邛崃市| 密云县| 滨海县| 威海市| 佳木斯市| 蓬安县| 遵义市| 宾川县| 黄陵县| 阿勒泰市| 泗洪县| 牙克石市| 饶河县| 呼玛县| 襄垣县| 舟曲县| 信阳市| 仙居县| 沙雅县| 沙湾县| 绥宁县| 克东县| 公安县| 海原县| 新化县| 新营市| 沅陵县| 榕江县| 家居| 金门县| 京山县|