2009-08-28 92 views
1

我有一個與this question有關的問題。我有一個Web服務(也使用PHP),返回一些名稱。當其中任何一個包含瑞典字符(A,A或O)和可能其他人以及我獲得的SOAPFault(看起來像我們有沒有XML文檔)。不過,我可以看到使用$ soapcalo全(正確的據我所知)響應 - > __ getLastResponse()獲得。php肥皂客戶端中的特殊字符問題

如何處理特殊字符?我試圖在客戶端和服務器上添加編碼屬性(utf-8),但沒有成功。

編輯:SOAP響應的摘錄:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="..."> 
<SOAP-ENV:Body> 
    <ns1:callFunctionResponse> 
    <ns1:Response> 
    <ns1:result>success</ns1:result> 
    <ns1:content> 
    <Contact> 
     <userName>VIB09SLA9EP</userName> 
     <firstName>Patrik</firstName> 
     <lastName>Stenstr&ouml;m</lastName> 
    </Contact> 
    </ns1:content> 
    </ns1:Response> 
    </ns1:callFunctionResponse> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

謝謝!

+0

你能不能給我們的SOAP響應的第一線?由於SOAP是XML,所以一旦您在服務器上正確添加了UTF-8,響應XML就會告訴您它是UTF-8。如果XML確實包含了UTF-8,那麼你會遇到一個問題,即它是ISO-8859-1。 – MSalters 2009-08-28 15:00:24

回答

3

好了大家 - 問題終於解決了,以爲我會在這裏發佈給任何其他類似similair問題的人。事實證明,問題在這個過程的早期發生。

生成的SOAP回覆的內容是用DomDocument構建的結構。稍後用saveHTML函數保存。事實證明,該函數添加了一些打破客戶端soap解碼的HTML編碼。

當使用saveXML函數時,應答程序成功(即添加標籤和其他奇怪東西時)也被soap客戶端解碼爲正確的字符串。

我希望這是它的結束,但你永遠不知道:)

感謝所有幫助和+1那些有助於檢查正確的地方。

/維克托

+0

嗨,我不是很清楚你如何解決這個問題。因爲我面臨着確切的問題。請你可以發表一些詳細的代碼? – 2012-09-23 13:08:12

+0

對於我saveHTML增加了額外的編碼打破了肥皂編碼,當我改變爲saveXML我得到了「原始」編碼,然後可以正確處理。同時檢查其他答覆,可能會對你的情況有所幫助。 – Victor 2012-09-24 07:49:50

2

不知道這是否有幫助,但也許看看HTML entities

+0

謝謝。我想可以分別對所有的å,ä和ö編碼爲å ä和ö,但這確實不應該是必要的。 – Victor 2009-08-31 06:46:03

+0

編輯到上面:事實證明,å等編碼實際上是打破瞭解碼的第一位!洗手時不要這樣做! :) – Victor 2009-08-31 07:40:28

4

只是一個瘋狂的猜測:你確定名稱實際上 UTF-8編碼?我認爲只是設置SOAP屬性將會改變值的實際編碼。在通過SOAP返回之前,您是否嘗試過在名稱上使用utf8_encode

+0

我現在:) 不幸的是,它並沒有任何區別,並且服務器端日誌記錄(基本的文本文件)出現在utf-8中,所以一切似乎都沒問題。謝謝 – Victor 2009-08-31 06:48:19

0

是SOAP服務器的基於Windows的服務器?我注意到,有時基於Windows的服務器或應用程序將不會發送UTF-8,而是在cp1252發送。

在一個應用程序在那裏我有特殊字符下來在編碼,我只想在我的HTML輸出運行下面的代碼:

<?php 
print htmlentities($string, ENT_COMPAT, 'cp1252'); 

爲了確保任何特殊字符進行編碼的HTML輸出。

+0

我真的沒有在這裏跟着你......問題是我只能訪問通過__getLastResponse()返回的真實數據 - 通常只是獲取SOAP錯誤。 但回答這個問題 - 是的,肥皂服務器運行在Windows機器上。 – Victor 2009-08-31 06:50:16

1

因爲我打了這個問題,作爲第一個結果,而谷歌搜索「SoapClient的不正確解碼UTF8數據」

我的問題是,特殊字符,其中灌進管道UTF-8編碼和PHP SoapClient沒有正確解碼它們。

它是通過更改php文件的編碼來修復的,因爲我的類是UTF-8。