最近在做一个采集程序,需要用到iconv函数把抓取来过的gb2312编码的页面转成utf-8, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一部分。让我郁闷了好一会儿,去网上一查资料才知道这是iconv函数的一个bug。iconv在转换字符"—",英文名中的"."等等字符,转换就断掉了,这些字符后的文字都没法继续转换了。
解决方法很简单,就是在需要转成的编码后加 "//IGNORE" 也就是iconv函数第二个参数后,忽略错误。如下:
$text=iconv("gb2312","utf-8//IGNORE",$text);
还有一种更简单的方法,
不使用gb2312,而写成GBK,就可以了,如下:
$text=iconv("gbk","utf-8",$text);
(文章来自于南京欣才PHP培训)