【问题标题】:PHP SOAP server doesn't correctly process UTF-8 strings from a C# SOAP clientPHP SOAP 服务器无法正确处理来自 C# SOAP 客户端的 UTF-8 字符串
【发布时间】:2011-01-05 19:15:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这并不奇怪(您遇到了互操作性问题)。见72.249.21.88/nonintersecting/2006/11/15/the-s-stands-for-simple。它写得很幽默,但很有趣,因为它是真实的。
  • 实际上,当我在努力让这两者发挥作用时,我实际上是这样读的。更糟糕的是,我必须让一个有效的公钥/私人系统与服务器一起进行签名和客户端验证。那是一个真正的痛苦。

标签: c# php soap utf-8


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我已经在做那部分了,我缺少的是 $server->decode_utf8 = false。
    【解决方案3】:

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

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

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

    之后,你的网络服务也将是这样的:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多