目前使用这个函数进行转码:
function safeEncoding($str){
$code=mb_detect_encoding($str,array('ASCII','GB2312','GBK','UTF-8'));//检测字符串编码
if($code=="CP936"){
$result=$str;
}
else{
//$result=mb_convert_encoding($str,'UTF-8',$code);//将编码$code转换为utf-8编码
$result=iconv($code,"UTF-8",$str);
}
  return $result;
}
可是还是有问题,遇到有些明明charset写着gb2312的抓回来还是乱码,请教高手,curl到底该怎么全面的进行转码呢?就是把gbk,gb2312等网页常用格式转成utf8的。

解决方案 »

  1.   

    自相矛盾了吧?
    $code=mb_detect_encoding($str,array('ASCII','GB2312','GBK','UTF-8'));//检测字符串编码
    if($code=="CP936"){
      $result=$str;//如果是 GBK(CP936就是GBK)就不转码
    }else{
      $result = iconv($code,"UTF-8",$str);//否则就转成 utf-8(utf-8转成utf-8???)
    }
      

  2.   

    可是淘宝的网页是gbk但是抓取回来却是EUC-CN的。
      

  3.   

    EUC-CN是GB 2312最常用的表示方法。浏览器编码表上的“GB2312”,通常都是指“EUC-CN”表示法。
    这不是关键!
    你需要的是 把gbk,gb2312等网页常用格式转成utf8的
    而你的代码正好没有这样做if(! mb_check_encoding($str, 'utf-8')) {
      $str = mb_convert_encoding($str,'UTF-8','gbk');
    }