萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php獲取utf8字符串的字符長度實例

php獲取utf8字符串的字符長度實例

   今晚在寫框架的表單驗證類時,需要判斷某個字符串長度是否在指定區間內,很自然地,想到了PHP中的strlen函數。

 代碼如下  


$str = 'Hello world!中';
echo strlen($str); // 輸出12

  測試一下中文

 代碼如下  

$str = '你好,世界!';
echo strlen($str); // GBK或GB2312下輸出12,UTF-8下輸出18 

  PHP內置的字符串長度函數strlen無法正確處理中文字符串,它得 到的只是字符串所占的字節數。對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差異了(在 UTF-8編碼下,一個漢字占3個字節)。

  下面這個實例摘自大名鼎鼎的WordPress,非常精確的哦,另外需要注意的是本函數僅適用於utf-8 編碼下的字符串。

 代碼如下  


function utf8_strlen($string=null){
    // 將字符串分解為單元
    preg_match_all("/./us", $string, $match);
    // 返回單元個數   
    return count($match[0]);
}

  但以上代碼在UTF-8編碼下並不能處理GBK/GB2312的中文字符串,因為GBK/GB2312的中文字符會被識別為兩個字符而計算出來的中文字符數量會翻倍,於是我想到了這麼一個辦法:

 代碼如下  

    $tmp = @iconv('gbk', 'utf-8', $str);
    if(!empty($tmp)){
    $str = $tmp;
    }
    preg_match_all('/./us', $str, $match);
    echo count($match[0]);

  可兼容GBK/GB2312及UTF-8編碼,經小量數據測試通過,但暫未確定是否完全正確

copyright © 萬盛學電腦網 all rights reserved