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

PHP 中文截取函數:精準處理多字節字符串

     編輯:PHP 相關知識

問題背景

在 PHP 中直接使用 substr() 截取包含中文的字符串,往往會導致半個漢字被截斷,產生亂碼。這是因為漢字在 GBK/UTF-8 編碼下佔用多個位元組,而 substr() 按位元組計算長度。

解決方案:cnSubStr 函數

以下函數通過檢測字符的 ASCII 碼值(>127 視為多字節字符),逐字符拼接,確保截取長度以「字符」為單位而非位元組。

<?php
function cnSubStr($string, $sublen) {
    if ($sublen >= strlen($string)) {
        return $string;
    }
    $s = '';
    for ($i = 0; $i < $sublen; $i++) {
        if (ord($string{$i}) > 127) {
            // 雙字節字符:取當前與下一個位元組
            $s .= $string{$i} . $string{++$i};
        } else {
            $s .= $string{$i};
        }
    }
    return $s;
}
?>

使用範例

<?php
$str = "242432反對感是456犯得上廣泛大使館地方7890";
$len = 20;
echo cnSubStr($str, $len); // 輸出前 20 個字符(含中文)
?>

注意事項

  • 此函數適用於 GBK/Big5 等雙字節編碼環境。
  • 若專案使用 UTF-8,建議改用 mb_substr() 或 mb_strcut()(需開啟 mbstring 擴展)。
  • 生產環境中應優先使用多字節字符串函數庫,避免手寫邏輯漏洞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved