[英]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.