2011-11-04 127 views
5

您好我有一個使用Zend框架構建的Web服務。其中一種方法旨在發送有關訂單的詳細信息。我遇到了一些編碼問題。一個是返回的值包含以下內容:SOAP-ERROR:編碼:字符串...不是一個有效的UTF-8字符串

海梅·託雷斯·博德#322-A上校洛馬斯聖瑪麗亞

的web服務返回以下故障:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode>SOAP-ENV:Server</faultcode> 
     <faultstring>SOAP-ERROR: Encoding: string 'Jaime Torres Bodet #322-A Col. Lomas de Santa Mar\xc3...' is not a valid utf-8 string</faultstring> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

應該如何我去解決這個問題?

謝謝

+1

問題的UTF-8字符的註釋是由於數據庫中的一個截斷的字符串。該字段被設置爲VARCHAR(50),並且它完全在編碼值的中間被截斷。令人驚歎的哈哈。 –

回答

9

今天我遇到同樣的問題 - 這導致了這個問題的代碼:

$request->Text = substr($text, 0, 40); 

改變SUBSTR到mb_substr似乎解決問題:

$request->Test = mb_substr($text, 0, 40, 'utf8'); 
+0

謝謝,是的,它適用於我 –

4

問題是,í!= i。嘗試在使用請求之前將您的字符串轉換爲UTF-8。它可能看起來像:

$string = iconv('windows-1252', 'UTF-8', $string); 

http://php.net/iconv

+0

不夠公平,但我希望能夠發送í而不是將其轉換爲我...因爲它是墨西哥地址。 –

+0

它將以í發送,但採用UTF-8編碼時,請不要擔心。 – silex

+0

感謝人的這個標誌是一個完全不同的性質。謝謝:) –

14

怎麼樣改變編碼設置:

SERVER:

$server = new SoapServer("some.wsdl", array('encoding'=>'ISO-8859-1')); // for 'windows-1252' too 

客戶:

$server = new SoapClient("some.wsdl", array('encoding'=>'ISO-8859-1')); // for 'windows-1252' too 

...則轉換將自動爲UTF-8一樣,我有類似的問題,所以幫我,所以它是測試

+0

非常感謝。你是一個拯救生命的人...... –

2

以上鉛的答案我嘗試:

// encode in UTF-8 
$string = utf8_encode($string); 

這也解決了我的錯誤。

參考:utf8_encode()

0

我定像這樣使用mb_convert_encodingarray_walk_recursive問題走進我的POST參數,名爲$ PARAMS(陣列)。

也許這是對您有用:

array_walk_recursive($params,function (&$item){ 
    $item = mb_convert_encoding($item, 'UTF-8'); 
}); 
0

我發現在我的情況不是字符串的編碼是問題,但該文件本身沒有保存爲UTF-8。即使使用UTF-8編碼顯式保存也沒有幫助。

對我來說它的工作插入與像 // Å

相關問題