PHP curl编码问题造成替换后“小姐”变成“秀”问题

Posted by he; tagged with php , 编码 , 替换 , curl

$c = curl_init();
curl_setopt($c, CURLOPT_URL,'http://www.xiasl.net/');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_HEADER, 1);
$content = curl_exec($c);
curl_close($c);
$content=@str_replace('〗','',$content);  //请注意这行,这个字符为什么那么怪异,会对文本内容造成影响?
echo $content;

只要替换“〗”这个字符,就会把内容中所有“小-姐”这个词,变成“秀”。百思不得其解。

替换“〗”的结果:
1.png

不替换“〗”的结果:
2.png



大佬的正解如下:
3.jpg

就是
小姐:d0a1 bde3
〗:a1bd
秀:d0e3

这是gbk编码不能正确判断每个汉字的开始结束的问题。
建议把网页先转成utf8,然后你php源代码也用utf8来写,就不会有此类问题了。


按照大佬的思路终于解决了。

如果需要最终内容为gb2312编码的话,先把获取到的内容全部转成UTF-8编码,再进行过滤替换,最终再次进行编码转换为gb2312,就没这个灵异般的事情了。

$c = curl_init();
curl_setopt($c, CURLOPT_URL,'http://www.xiasl.net/');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_HEADER, 1);
$content = curl_exec($c);
curl_close($c);
$content=mb_convert_encoding($content,  'UTF-8', 'UTF-8,GBK,GB2312,BIG5');//先转UTF-8
$content=@str_replace('〗','',$content); //进行替换
$content=mb_convert_encoding($content, 'GB2312', 'UTF8');//再转回GB2312
echo $content;
- 本文完 -