php 获取汉字,php 获取汉字长度
也許很多phper不知道,PHP內置的字符串長度函數strlen()無法正確處理中文字符串,它得到的只是字符串所占的字節數。對于GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對于UTF-8編碼的中文,就是3倍的差異了(在UTF-8編碼下,一個漢字占3個字節)。
所以當需要計算字符串中漢字的個數,或者一個字符串的長度,就不是簡單的用strlen()能解決了,我們需要曲線救國了,下面我寫個簡單的代碼舉例說明:
我們假設我們的編碼方式是UTF-8
$encode = 'UTF-8';
$str = "admin你好";
$str_num =?mb_strlen($a, $encode);
$j = 0;
for($i=0; $i < $str_num; $i++)
{
if(ord(mb_substr($a, $i, 1, $encode))> 0xa0)
{
$j++;
}
}
echo? “這個字符串的長度是:" . $str_num;
echo?? "有".$j. "個漢字 ";
結果:
這個字符串的長度是:7
有2個漢字
若簡單的用strlen函數,這個字符串的長度將顯示為:11,顯然是錯誤的
若一定要用strlen和substr函數來計算字串中漢字的個數,也是有辦法的:
for($i=0;$i < strlen($a);$i++)
{
if(ord(substr($a, $i, 1))> 0xa0)
{
$j++;
$i++;
$i++;??????????? //utf-8編碼下,跳過兩個字節;gb2312,則跳過一個字節即可
}
}
mb_strlen()簡介:
采用mb_strlen函數可以較好地解決這個問題。mb_strlen的用法和strlen類似,只不過它有第二個可選參數用于指定字符編碼。例如得到UTF-8的字符串$str長度,可以用mb_strlen($str,'UTF-8')。如果省略第二個參數,則會使用PHP的內部編碼。內部編碼可以通過mb_internal_encoding()函數得到。需要注意的是,mb_strlen并不是PHP核心函數,使用前需要確保在php.ini中加載了php_mbstring.dll,即確保“extension=php_mbstring.dll”這一行存在并且沒有被注釋掉,否則會出現未定義函數的問題。
總結
以上是生活随笔為你收集整理的php 获取汉字,php 获取汉字长度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql infile local,M
- 下一篇: php发送邮件,标题是乱码,php的ma