SOAP-ERROR:编码:字符串…不是有效的utf-8字符串

问题描述 投票:6回答:6

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

[[Jaime Torres Bodet#322-A Col.Lomas de SantaMarí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>

我应该如何解决这个问题?

感谢


后续:问题是由于数据库截断了字符串。该字段设置为VARCHAR(50),并且恰好在编码值的中间被截断。
web-services zend-framework soap encoding
6个回答
9
投票
今天我遇到了同样的问题-导致该问题的代码是:

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

将substr更改为mb_substr似乎可以解决问题:

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


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

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

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

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

4
投票
以上答案使我尝试:

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

这也为我解决了错误。

参考:utf8_encode()


0
投票
我使用mb_convert_encodingarray_walk_recursive来解决名为

$ params(数组)的POST参数,从而解决了此类问题。

也许这对您有用:

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


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

对我来说,它可以插入带有UTF-8字符的注释,例如// Å

© www.soinside.com 2019 - 2024. All rights reserved.