Sivo 悉见

PHP正则表达式无法匹配生僻中文字的解决办法

匿名 · 更新于 2014/1/15

今天遇到一个情况,用PHP匹配一个新闻列表页面,原页面是用gb2312编码的,我采集的时候用iconv转换成了utf-8,之前几页都可以正确匹配,但是遇到其中一页总是匹配到一半就结束了,后边的匹配不到了,后来发现挨着截断的部分,是一个中文字符“曌”,也许是因为这个中文是一个生僻字吧,iconv无法正确转码就截断了,后来在网上找了很久,找到一个函数mb_convert_encoding,于是试了一下,

$con = "..."; //采集到的数据
$con = mb_convert_encoding(file_get_contents($url),"utf-8","gb2312");

 
果然出错的页面可以完整匹配了,但是“曌"这个字却乱码了,后来将编码gb2312换成GBK,才可以正确输出了,此处说明一下原因:
GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。
也就是gb2312是gbk的一个子集,gb2312有的字符,GBK有,gb2312没有的,GBK也许还有,尤其是针对生僻的汉字尤其有效!