利用以上漢字與英文的差異,我們就可以利用mb_strlen函數與strlen函數分別計算出兩組長度數字,然後根據規律進行運算即可判斷出字串的類型了
先講一下strlen與mb_strlen是求字串長度的函數
代碼如下 |
複製代碼 |
<?php //測試時檔案的編碼方式要是UTF8 $str='中文a字1符'; echo strlen($str).'<br>';//14 echo mb_strlen($str,'utf8').'<br>';//6 echo mb_strlen($str,'gbk').'<br>';//8 echo mb_strlen($str,'gb2312').'<br>';//10 ?> |
PHP內建的字串長度函數strlen無法正確處理中文字串,它得 到的只是字串所佔的位元組數。對於GB2312的中文編碼,strlen得到的值是漢字個數的2倍,而對於UTF-8編碼的中文,就是3倍的差異了(在 UTF-8編碼下,一個漢字佔3個位元組)。
例
代碼如下 |
複製代碼 |
<?php /** * PHP判斷字串純漢字 OR 純英文 OR 漢英混合 */ echo '<meta charset="utf-8" />'; function utf8_str($str){ $mb = mb_strlen($str,'utf-8'); $st = strlen($str); if($st==$mb) return '純英文'; if($st%$mb==0 && $st%3==0) return '純漢字'; return '漢英混合'; } $str = '瓊台部落格'; echo '字串:<span style="color:red">'.$str.'</span>,是<span style="color:red">'.utf8_str($str).'</span>'; ?> |
需要注意的是,mb_strlen並不是PHP核心函數,使用前需要確保在php.ini中載入了php_mbstring.dll,即確保“extension=php_mbstring.dll”這一行存在並且沒有被注釋掉,否則會出現未定義函 數的問題