在软件开发中,我们经常会遇到最让人头疼的编码问题,由于各种网络软件之间使用的默认编码都不一致也就导致了解码的不一致,最终出现了乱码问题,有时候不得不自己使用方法来转换一些网络上的数据,总结一下PHP中针对UTF-8编码字符串的几种检测方法,方便大家查阅。
function is_utf8($string) {
$c=0; $b=0;
$bits=0;
$len=strlen($string);
for($i=0; $i<$len; $i++){
$c=ord($string[$i]);
if($c > 128) {
if(($c >= 254)) return false;
elseif($c >= 252) $bits=6;
elseif($c >= 248) $bits=5;
elseif($c >= 240) $bits=4;
elseif($c >= 224) $bits=3;
elseif($c >= 192) $bits=2;
else return false;
if(($i+$bits) > $len) return false;
while($bits > 1){
$i++;
$b=ord($string[$i]);
if($b < 128 || $b > 191) return false;
$bits--;
}
}
}
return true;
}
$string = file_get_contents("i://test.txt");
echo is_utf8($string);
function is_utf8($string) {
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
}
$string = file_get_contents("i://test.txt");
echo is_utf8($string);