首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 計算字串中中文字元數量的實作教學(含 mb_strlen 替代方案)

     編輯:PHP 綜合知識

在 PHP 開發中,計算字串長度是常見需求。對於純英文字串,直接使用 strlen() 即可取得字元數;但若字串包含中文,strlen() 會回傳位元組數而非字元數,導致結果錯誤。雖然 mb_strlen() 可正確處理多位元組字元,但若伺服器未安裝 mbstring 擴充套件,就得自行實作解決方案。

使用 mb_strlen 的標準做法

若環境支援 mbstring,可直接呼叫:

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

結果為 7,正確反映字元數量。

無 mbstring 擴充套件時的自行實作原理

字串由位元組組成,英文字元佔 1 位元組(ASCII 碼 < 128,即 0x80),中文字元在 UTF-8 編碼下佔 3 位元組,在 GBK 編碼下佔 2 位元組。利用這特性,可遍歷字串位元組,遇到高位元組(≥ 0x80)即依編碼跳過對應位元組數。

實作範例:支援 UTF-8 與 GBK 的字元計數函式

<?php
function mbstrlen($str, $encoding = "utf8") {
    if (($len = strlen($str)) == 0) {
        return 0;
    }
    $encoding = strtolower($encoding);
    if ($encoding == "utf8" || $encoding == "utf-8") {
        $step = 3;
    } elseif ($encoding == "gbk" || $encoding == "gb2312") {
        $step = 2;
    } else {
        return false;
    }
    $count = 0;
    for ($i = 0; $i < $len; $i++) {
        $count++;
        if (ord($str{$i}) >= 0x80) {
            $i = $i + $step - 1; // 扣除 for 迴圈的 $i++
        }
    }
    return $count;
}

// 測試
echo mbstrlen(iconv("utf-8", "gbk", "你是我的小蘋果"), "gbk"); // GBK 編碼測試
echo mbstrlen("你是我的小蘋果"); // UTF-8 編碼測試

此函式先判斷編碼類型設定跳躍步長,再逐位元組檢查,若為高位元組則依步長跳過,最終回傳字元計數。雖然簡易,但能在無 mbstring 環境下解決中文字元計數問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved