PHP检测字符串是否为UTF8编码的常用方法
本文实例总结了PHP检测字符串是否为UTF8编码的常用方法。分享给大家供大家参考。具体实现方法如下:
检测字符串编码可以有很多种方法,如利用ord获得字符的进制然后进入判断,或利用mb_detect_encoding函数来处理,下面整理了四种常用方法供大家参考。
例子1
/** *检测字符串是否为UTF8编码 *@paramstring$str被检测的字符串 *@returnboolean */ functionis_utf8($str){ $len=strlen($str); for($i=0;$i<$len;$i++){ $c=ord($str[$i]); if($c>128){ if(($c>247))returnfalse; elseif($c>239)$bytes=4; elseif($c>223)$bytes=3; elseif($c>191)$bytes=2; elsereturnfalse; if(($i+$bytes)>$len)returnfalse; while($bytes>1){ $i++; $b=ord($str[$i]); if($b<128||$b>191)returnfalse; $bytes--; } } } returntrue; }
例子2
functionis_utf8($string){ returnpreg_match('%^(?: [\x09\x0A\x0D\x20-\x7E] #ASCII |[\xC2-\xDF][\x80-\xBF] #non-overlong2-byte | \xE0[\xA0-\xBF][\x80-\xBF] #excludingoverlongs |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} #straight3-byte | \xED[\x80-\x9F][\x80-\xBF] #excludingsurrogates | \xF0[\x90-\xBF][\x80-\xBF]{2} #planes1-3 |[\xF1-\xF3][\x80-\xBF]{3} #planes4-15 | \xF4[\x80-\x8F][\x80-\xBF]{2} #plane16 )*$%xs',$string); }
准确率基本和mb_detect_encoding()一样,要对一起对,要错一起错。
编码检测不可能100%准确,这个东西已经可以基本满足要求了。
例子3
functionmb_is_utf8($string) { returnmb_detect_encoding($string,'UTF-8')==='UTF-8';//新发现 }
例子4
//Returnstrueif$stringisvalidUTF-8andfalseotherwise. functionis_utf8($word) { if(preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word)==true||preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word)==true||preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word)==true) { returntrue; } else { returnfalse; } }//functionis_utf8
希望本文所述对大家的PHP程序设计有所帮助。