0

我正在尝试使用 PHP 中的 Curl 调用 .net 网络服务。每次我尝试这样做时,都会收到编码错误。它说不支持 utf...8。当我检查 tcpdump (PacketPeeper) 时,我看到由于某种原因 curl 正在将字符串“utf-8”转换为“utf...8”。实际上,它将所有“-”转换为“...”。

知道为什么吗?

$req = "<?xml version=\"1.0\" encoding=\"utf‐8\"?>
    <soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema‐instance\"
    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
    xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">
    <soap:Body>
        <GenerateLink>
        ..............  
        </GenerateLink>
        </soap:Body>
    </soap:Envelope>";
$soap_do = curl_init(); 
curl_setopt($soap_do, CURLOPT_URL,            "http://www.myurl.com/serv.asmx" );   
curl_setopt($soap_do, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_POST,           true ); 
curl_setopt($soap_do, CURLOPT_POSTFIELDS,     $req); 
curl_setopt($soap_do, CURLOPT_HTTPHEADER,     array('Content-Type: text/xml; charset: utf-8' ,'SOAPAction: "http://www.myurl.com/serv.asmx"', 'Content-Length: '.strlen($req) )); 


$response = curl_exec($soap_do);
4

1 回答 1

0

当我在应用程序之间复制粘贴代码时,我遇到了这个问题,并且在粘贴(通常使用 Office 应用程序)时,连字符变成了非中断连字符或除了简单的连字符之外很难区分的字符。我使用十六进制编辑器查看存储字符串(部分)的文件,该文件将提供给 CURL。您应该ord($req{33})==45在调试时爆炸前检查!(检查我的索引 33,这只是一个快速计数!)

于 2013-03-28T21:07:18.590 回答