加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用 PHP的代码判断串行编码是否是 UTF-8

发布时间:2023-06-13 13:03:02 所属栏目:PHP教程 来源:
导读:我们以前常用mb_detect_encoding()此函数检测字符编码,代码如下:

//判断字符串是什么编码
if ($tag === mb_convert_encoding(mb_convert_encoding($tag, "GB2312", "UTF-8"), "UTF-8", "GB2312")) {
}
else
我们以前常用mb_detect_encoding()此函数检测字符编码,代码如下:

//判断字符串是什么编码 
if ($tag === mb_convert_encoding(mb_convert_encoding($tag, "GB2312", "UTF-8"), "UTF-8", "GB2312")) { 

else {//如果是gb2312 的就转换为utf8的 
$tag = mb_convert_encoding($tag, 'UTF-8', 'GB2312'); 

$keytitle = “%D0%BE%C6%AC”;时,检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大,怎么解决呢,我的办法是:

$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK','UTF-8');

参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式,对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会.

上面办法还是解决不了,下面又找到了一个解决方法,代码如下:

// Returns true if $string is valid UTF-8 and false otherwise.  
function is_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)  
{  
return true;  
}  
else  
{  
return false;  
}  
} // function is_utf8 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章