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

PHP strlen 與 mb_strlen 深度對比:中英文混排長度計算的正確姿勢

     編輯:PHP 相關知識

PHP 字符串長度計算陷阱:strlen 返回字節數,mb_strlen 返回字符數,中英文混排時差異巨大,必須根據編碼選擇正確函數。

核心差異演示

$str = '中文a字1符'; // UTF-8 編碼文件

echo strlen($str);           // 14 (字節數: 4漢字×3 + 2 ASCII)
echo mb_strlen($str, 'utf8'); // 6  (字符數: 4漢字 + 2 ASCII)
echo mb_strlen($str, 'gbk');  // 8  (GBK: 4漢字×2 + 2 ASCII)
echo mb_strlen($str, 'gb2312'); // 10

編碼與字節對照表

編碼中文字節數英文字節數
UTF-831
GBK/GB231221

實用技巧:計算顯示佔位寬度

中文佔 2 位,英文佔 1 位:

$display_width = (strlen($str) + mb_strlen($str, 'UTF8')) / 2;
// "中文a字1符" → (14 + 6) / 2 = 10 位

mb_strlen 使用要點

  • 第二參數指定編碼:mb_strlen($str, 'UTF-8')
  • 省略時使用 PHP 內部編碼(mb_internal_encoding())
  • 非核心函數,需啟用 extension=php_mbstring.dll

常見坑點與對策

場景錯誤做法正確做法
截取前 N 個字符substr($str, 0, $n)mb_substr($str, 0, $n, 'UTF-8')
驗證長度限制strlen($str) > 20mb_strlen($str, 'UTF-8') > 20
按字符遍歷for($i=0;$ifor($i=0;$i

最佳實踐建議

  1. 專案統一使用 UTF-8 編碼
  2. 所有字符串長度/截取/操作統一用 mb_* 系列函數
  3. 配置 mbstring.internal_encoding = UTF-8 避免重複傳參
  4. 資料庫連接、HTML meta、PHP 文件編碼三位一體
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved