UTF-8编码的文件分为带Bom和不带Bom两种,带Bom的大家都很容易处理,不带Bom的会有点麻烦,所以写了一个函数去判断,代码如下: //返回 1 表示纯 ASCII(即是所有字符都不大于127) //返回 2 表示UTF8 //返回 0 表示正常gb编码 function TestUtf8($text) { if(strlen($text) < 3) return false; $lastch = 0; $begin = 0; $BOM = true; $BOMchs = array(0xEF,0xBB,0xBF); $good = 0; $bad = 0; $notAscii = 0; for($i=0; $i < strlen($text); $i++) { $ch = ord($text[$i]); if($begin < 3) { $BOM = ($BOMchs[$begin]==$ch); $begin += 1; continue; }
if($begin==4 && $BOM) break;
if($ch >= 0x80 ) $notAscii++;
if( ($ch&0xC0) == 0x80 ) { if( ($lastch&0xC0) == 0xC0 ) { $good += 1; } else if( ($lastch&0x80) == 0 ) { $bad += 1; } } else if( ($lastch&0xC0) == 0xC0 ) { $bad += 1; } $lastch = $ch; } if($begin == 4 && $BOM) { return 2; } else if($notAscii==0) { return 1; } else if ($good >= $bad ) { return 2; } else { return 0; } } (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|