判断字符串是否为UTF8编码

时间:2023-03-09 08:50:30
判断字符串是否为UTF8编码

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到4个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

<?php
/**
*检查字符串是否是utf8编码
*@param string $string 被检测字符串
*@return Boolean
*/ function isutf8($string){
$c=0;$b=0;
$bits=0;
$len=strlen($string); //字符串编码后的字节数
for($i=0;$i<$len;$i++){
$c=ord($string[$i]); //对应的assic编码,通过编码后的首字节判断字符由几个字节编码组成
if($c>128){ //1000 0000
if($c>=254) return false; //1111 1110
elseif($c>=252) $bits=6; //1111 1100
elseif($c>=248) $bits=5; //1111 1000
elseif($c>=240) $bits=4; //1111 0000
elseif($c>=224) $bits=3; //1110 0000
elseif($c>=192) $bits=2; //1100 0000
else return false;
if(($i+$bits)>$len); return false;
while($bits>1){
$i++;
$b=ord($string[$i]);
if($b<128 || $b>191) return false; //编码在1000 0000 ---- 1011 1111 合格
$bits--;
}
}
}
return true;
}