SOAP-ERROR:Encoding:string ...不是有效的utf-8字符串

时间:2011-11-04 07:51:03

标签: web-services zend-framework soap encoding

您好我使用Zend Framework构建了一个Web服务。其中一种方法旨在发送有关订单的详细信息。我遇到了一些编码问题。返回的值之一包含以下内容:

Jaime Torres Bodet#322-A。Lomas deSantaMarí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>

我应该怎么解决这个问题?

由于

5 个答案:

答案 0 :(得分:16)

如何更改编码设置:

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,我有类似的问题,所以这对我有帮助,所以经过测试

答案 1 :(得分:9)

今天我遇到了同样的问题 - 导致该问题的代码是:

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

将substr更改为mb_substr似乎解决了这个问题:

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

答案 2 :(得分:4)

问题在于í!= i。在请求中使用之前,尝试将字符串转换为UTF-8。它可能看起来像这样:

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

请参阅http://php.net/iconv

答案 3 :(得分:2)

上面的答案让我尝试:

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

也解决了我的错误。

参考:utf8_encode()

答案 4 :(得分:0)

我发现在我的情况下,字符串的编码不是问题,而是文件本身没有保存为UTF-8。即使使用UTF-8编码进行显式保存也无济于事。

对我而言,它可以插入一个带有UTF-8字符的评论 // Å