2013-03-28 21 views
0

我試圖使用來自PHP的Curl調用.net webservice。 每次我嘗試去做,我都會遇到編碼錯誤。它說utf ... 8不支持。當我檢查tcpdump(PacketPeeper)時,我發現由於某種原因,curl正在將字符串「utf-8」轉換爲「utf ... 8」。實際上,它將所有的「 - 」轉換爲「...」。在做捲曲時,PHP將連字符轉換爲三個點

任何想法爲什麼?

$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); 
+0

隨機的事情嘗試:如果您設置'CURLOPT_HTTPHEADER' _before_'CURLOPT_POSTFIELDS'會發生什麼? – Wrikken

回答

0

我有這個,當我的應用程序之間複製粘貼代碼,而粘貼(通常與Office應用程序),連字符得到了改變成非中斷連字符或這些字符是很難從簡單的連字符分辨。我使用了十六進制編輯器來查看存儲字符串(部分)的文件,該文件將被提供給CURL。調試時應該在爆炸前檢查ord($req{33})==45! (檢查我的索引33,這只是一個快速計數!)