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;
只要替换“〗”这个字符,就会把内容中所有“小-姐”这个词,变成“秀”。百思不得其解。
替换“〗”的结果:
不替换“〗”的结果:
大佬的正解如下:

就是
小姐: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;