繁体   English   中英

PHP SOAP服务器无法正确处理来自C#SOAP客户端的UTF-8字符串

[英]PHP SOAP server doesn't correctly process UTF-8 strings from a C# SOAP client

我有一个使用基于C#的应用程序使用的PHP SOAP服务器(使用nuSOAP)。

当C#应用程序提交请求时,字符串采用UTF-8编码。 我使用网络嗅探器验证了字节序列是有效的UTF-8。 但是,当PHP出现时,我将它们发布到数据库或通过电子邮件发送时,它看起来像标准ASCII一样被打印,UTF编码字节被视为字符。

C#应用程序从SOAP服务器接收UTF-8时,我遇到了同样的问题。 .NET将每个字节解释为CHAR而不是BYTE。 我必须编写一个小函数,将每个CHAR转换为BYTE,然后将其转换为UTF-8字符串,并且运行良好。

问题是,我需要在PHP服务器端执行什么操作才能以MySQL和mail()函数的UTF-8形式正确处理传入的SOAP请求? 我已经尝试过utf8_encode()utf8_decode()但那些使字符串更糟。

经过一整天的努力,我找到了解决方案。

nuSOAP在传入的SOAP请求上自动运行utf8_decode 在禁用该功能并确保使用mysqli->set_charset('utf8')一切似乎都可以正常工作了。

现在,我想知道为什么.NET无法正确解释SOAP响应字符串...

在第5480行附近的nusoap.php文件中,您应该更改:

FROM: $xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';

收件人: $xml = '<?xml version="1.0" encoding="UTF-8"?>';

之后,您的Web服务也将如下所示:

<?xml version="1.0" encoding="UTF-8" ?>

并且,在第151行(nusoap.php)中进行更改:

//var $soap_defencoding = 'ISO-8859-1';
var $soap_defencoding = 'UTF-8';

您可以使用
$ server =新的soap_server();
$ server-> soap_defencoding ='UTF-8';
用于解码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM