唉,还是未解决
我的问题是这样的,我的网站(http://www.aaaa.com)跟另一个网站(http://www.bbb.com)合作,
我从自已网站取得数据后Get或Post过去(http://www.bbb.com/OK.php?param1=xxx&param2=cccc)
之后我的网站得到一个OK或者是ERROR的返回值,其中param1是中文字
我用@fsockopen 方法 Post过去,合作方网站收到param1全是??????????
我不用@fsockopen,直接Get过去的话param1全是乱码。我的网站是utf-8,合作方是GBK,我试着用 iconv
转换,还是乱码.现在真不知道怎么办了。各位大哥,有没有什么好的解决办法呀。
或者说,这种合作有没有什么好的方法,可以避免乱码呀。

解决方案 »

  1.   

    "我试着用 iconv 转换" ???
    如何做的?
      

  2.   

    iconv('utf-8', 'GBK', $param1);
      

  3.   

    header('Content-Type: application/x-www-form-urlencoded');
    header('Content-Type: text/xml;charset=utf-8');
    置于顶部$STR=iconv($str,'gbk','UTF-8');
      

  4.   

    用urlencode(),将要传的参数变成%AA的编码方式,传递中一般不会出现乱码
      

  5.   

    同意 5 楼~这个方法是最可取的。
    ----------------------------------
    指点迷津网 http://www.zhidianmijin.com
      

  6.   

    当然  你可以试试更变态一点的办法
    先把串base64_encode之后传递过去  然后再接收之后base64_decode
      

  7.   

    --那相当于我传过去之后,合作方那边再用 urldecode解么?
      

  8.   

    我也遇到過這種情況不過情況剛好與你相反
    我方是GBK 合作方是UTF-8我的做法是,把我方的字符用iconv轉換成 UTF-8, 再urlencode 傳過去實踐證明是成功的
      

  9.   

    function unescape($str) { //反解js页面提交过来的汉字escape编码

    $ret = '';
    $len = strlen($str);

    for ($i = 0; $i < $len; $i++) { if ($str[$i] == '%' && $str[$i+1] == 'u') { $val = hexdec(substr($str, $i+2, 4)); if ($val < 0x7f){ $ret .= chr($val);
    }else if($val < 0x800){ $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
    }else{ $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f)); $i += 5;
    }
    } else if ($str[$i] == '%') { $ret .= urldecode(substr($str, $i, 3)); $i += 2;
    } else{ $ret .= $str[$i];
    }
    }
    return $ret;
    }
      

  10.   

    LZ没搞清编码,GET方式的urlencode是无视什么utf-8,GBK的,传过去后用urldecode解码,这时候,如果编码不一致,再用iconv转码,就好了饿
      

  11.   

    使用base64_encode 后再post
    post方式可以调用curl资源库
      

  12.   

    合作方是jsp呀,他那边是不会给我urldecode,iconv的
      

  13.   

    谢谢 ghostxyz0 ,谢谢大家,终于没有乱码了。
    $msg=iconv('utf-8','GBK',$msg);
    $msg=urlencode($msg);
    原来要两个一起用
    这样就OK了。