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

PHP 不同編碼下字串長度計算差異:UTF-8 與 GB2312 的 strlen 與 mb_strlen 比較

     編輯:PHP 綜合知識

長度計算差異

編碼字串strlen (位元組)mb_strlen (字元)
UTF-8測試文字a測試文字259
GB2312測試文字a測試文字179

UTF-8 中文字佔 3 位元組,GB2312 佔 2 位元組,英文數字均佔 1 位元組。strlen 永遠回傳位元組數,mb_strlen 配合編碼參數回傳字元數。

MySQL varchar 存儲

MySQL 5.1+ 的 VARCHAR(10) 限制為 10 個字元而非位元組,無論編碼。因此判斷長度時必須依編碼選擇正確函式。

無 mbstring 環境的 UTF-8 截取函數

function cutStr($str, $start, $length) {
    $restr = ''; $j = 0;
    $end = $start + $length - 1;
    $plen = strlen($str);
    for ($i=0; $i<$plen; $i++) {
        $restr .= (ord($str[$i]) > 127) ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
        $j++;
        if ($j < $start) $restr = '';
        if ($j >= $end) break;
    }
    return $restr;
}

原理:UTF-8 中文字首位元組 > 127,直接取三個位元組組成一字元。

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