PHP在执行curl时将连字符转换为三个点


PHP converting hyphen to three dots when doing curl

我正在尝试使用Curl从PHP调用。net web服务。每次我尝试这样做,我得到一个错误的编码。上面说,如果……不支持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);

我在应用程序之间复制粘贴代码时遇到了这种情况,在粘贴(通常是Office应用程序)连字符时,连字符被更改为非中断-连字符或难以与简单的连字符区分的字符。我使用十六进制编辑器查看存储字符串(部分)的文件,这些字符串(部分)将被提供给CURL。你应该检查ord($req{33})==45在调试时爆炸!(检查一下索引33,这只是一个快速计数!)