PHP-php智能识别字符编码

PHP-php智能识别字符编码

甜柠檬 发布于 2017-07-17 字数 438 浏览 1084 回复 1

可能重复的问题
如何高效、准确、自动识别网页编码

用php写了一个程序来抓取网站的数据,可是目标网站网页数据的编码不统一,部分是gbk,部分是utf-8,而且没有什么规律,而我的程序统一使用的是utf-8编码,因此,需要识别目标页面的编码格式,从而进行相应的转换,有没有办法可以自动识别呢(不要通过charset来判断,因为有的页页并没有这个指明此项)?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜无邪 2017-11-05 1 楼

YBlog里的自动判断字符编码的。
原理是:gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英 文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)
php代码:
function safeEncoding($string,$outEncoding = 'UTF-8')

{

$encoding = "UTF-8";

for($i=0;$i<strlen($string);$i++)

{

if(ord($string{$i})<128)

continue;

if((ord($string{$i})&224)==224)

{

//第一个字节判断通过

$char = $string{++$i};

if((ord($char)&128)==128)

{

//第二个字节判断通过

$char = $string{++$i};

if((ord($char)&128)==128)

{

$encoding = "UTF-8";

break;

}

}

}

if((ord($string{$i})&192)==192)

{

//第一个字节判断通过

$char = $string{++$i};

if((ord($char)&128)==128)

{

//第二个字节判断通过

$encoding = "GB2312";

break;

}

}

}

if(strtoupper($encoding) == strtoupper($outEncoding))

return $string;

else
return iconv($encoding,$outEncoding,$string);

}