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程序设计有所帮助。