代码之家  ›  专栏  ›  技术社区  ›  Chris Thompson

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

  •  1
  • Chris Thompson  · 技术社区  · 16 年前

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

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

    我对从SOAP服务器接收UTF-8的C#应用程序也有同样的问题。NET将每个字节解释为字符而不是字节。我必须编写一个小函数,将每个字符转换为一个字节,然后再将其转换为UTF-8字符串,这样做非常有效。

    mail() 功能?我试过了 utf8_encode() utf8_decode()

    3 回复  |  直到 16 年前
        1
  •  1
  •   Chris Thompson    16 年前

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

    nuSOAP正在自动运行 utf8_decode 在传入的SOAP请求上。在我禁用该功能并确保使用 mysqli->set_charset('utf8')

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

        2
  •  0
  •   s-sharma    16 年前


    $server=新的soap_服务器();
    $server->soap_defencoding='UTF-8';

        3
  •  0
  •   ataravati    12 年前

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

    发件人: $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';