【问题标题】:Overcome Encoding Problems with PHP, SoapServer, UTF-8, and non English Characters?克服 PHP、SoapServer、UTF-8 和非英文字符的编码问题?
【发布时间】:2010-10-17 09:57:24
【问题描述】:
我无法让 PHP 与 SoapServer + UTF-8 很好地配合使用。任何时候任何人发送带有非英文字符(即有趣的引号、重音字符等)的 Soap 请求时,SoapServer 都会抛出一个异常,说“错误请求”。我尝试使用 utf8_decode 对请求进行解码,甚至使用 HTML 特殊字符对文本进行编码。没有什么对我有用。
我正在寻找一个正确方向的点,因为我现在迷路了。
【问题讨论】:
标签:
php
xml
soap
encoding
utf-8
【解决方案1】:
确保 SoapServer 和 SoapClient 均使用 UTF-8 编码进行初始化:
$client = new SoapClient("some.wsdl", array('encoding'=>'UTF-8'));
$server = new SoapServer("some.wsdl", array('encoding'=>'UTF-8'));
请求的 XML 是否包含“有趣的引号、重音字符等”?验证?
【解决方案2】:
下一步显然是验证您收到的请求是否实际编码为 UTF-8。像 WireShark 这样的网络嗅探器(或者甚至可以使用普通的旧 telnet 客户端进行一些工作)可以让您检查传递给服务器的确切数据。仔细查看并验证它实际上是有效的 UTF-8。