使用NuSOAP检索结果时出现XML错误(无效字符)

4
我正在使用NuSOAP与第三方API进行交互,包括运行数据库查询并检索结果。它一直非常可靠,但我遇到了一个特定查询的问题。NuSOAP生成了一个错误而不是返回结果:XML error parsing SOAP payload on line 2: Invalid character
事实证明,结果集包含了以下内容:Léa Lincoln。当我手动将重音字符更改为“普通”字符时,查询可以正常工作,NuSOAP没有出现任何错误。
因此,我的问题是如何解决这个问题。我无法控制来自数据库的数据,并且我需要NuSOAP不会在每次出现非标准字符时抛出错误并停止。谢谢。--Jeff

尝试使用UTF-16对XML进行编码 <?xml version="1.0" encoding="UTF-16"?> - HamZa
我无法更改来自服务器的内容。这是我可以从客户端(即在NuSOAP中)执行的操作吗? - jalperin
我不知道,试着查看文档,顺便我找到了这个链接可能会有所帮助 http://sourceforge.net/projects/nusoap/forums/forum/193579/topic/3718945 ... 致意 - HamZa
我尝试在NuSOAP中将$soap_defencoding设置为'UTF-8'和'UTF-16',但没有任何区别。你指给我的链接确实有帮助。我添加了建议的hack,似乎解决了我的问题。function nusoap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=true){ parent::nusoap_base(); // Hack by CAZypedia crew to fix character encoding of NCBI XML data from SOAP // This prevents non-English characters from causing the parser to choke. $xml = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $xml); // End hack. - jalperin
如果您想将您的评论作为答案编写,我会标记为已回答。谢谢! - jalperin
2个回答

5
在搜索和测试后,看起来CAZypedia团队的一个黑客攻击是解决方案:
function nusoap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=true){
    parent::nusoap_base();

    // Hack by CAZypedia crew to fix character encoding of NCBI XML data from SOAP
    // This prevents non-English characters from causing the parser to choke.
    $xml = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $xml);
    // End hack.
    $this->xml = $xml;
    $this->xml_encoding = $encoding;
    $this->method = $method;
    $this->decode_utf8 = $decode_utf8;

链接: http://sourceforge.net/projects/nusoap/forums/forum/193579/topic/3718945

这是一个关于it技术的链接,可能会对你有所帮助。请点击链接查看详情。

1
我曾经遇到了同样的问题,通过更改文件nusoap.php和class.nusoap_base.php中的变量$soap_defencoding = 'UTF-8',我解决了这个问题。
在这些文件中有两行代码,$soap_defencoding = 'UTF-8' 和 $soap_defencoding = 'ISO-8859-1',其中一行被注释掉了,另一行没有。
我尝试将一个选项的注释移到另一个选项上,这样就解决了问题!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接