2009-08-28 158 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。