程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php獲取utf8字符串的字符長度實例

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

編輯:關於PHP編程

       今晚在寫框架的表單驗證類時,需要判斷某個字符串長度是否在指定區間內,很自然地,想到了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編碼,經小量數據測試通過,但暫未確定是否完全正確

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved