我正在为一个外部节点处理一个简单的监听器,它将SOAP与它联系起来。除了简单的请求之外,节点还发送MultiPart消息,因此不允许我使用任何PHP SOAP库(如果您知道任何处理MultiPart消息,请告诉我)并强制我处理请求中的原始数据身体,即php://input
。没有问题,除了UTF-8支持。
PHP目前非常简单:
mb_internal_encoding('UTF-8');
echo file_get_contents('php://input');
例如,当向节点发送ñ
时,节点将向侦听器发送以下内容:
...
<message>}</message>
...
另一个例子是拉丁字符,例如č ć š đ ž Č Ć Š Đ Ž
作为
...
<message>c c s d z C C S D Z</message>
...
tcpdump显示请求以UTF-8发送,但XML仍包含无效字符:
POST /endpoint HTTP/1.0
Content-Type: text/xml; charset=UTF-8
SOAPAction: ""
User-Agent: Axis2
Host: IP:PORT
Content-Length: 1196
<?xml version='1.0' encoding='UTF-8'?>
...
<message>}</message>
...
假设节点正在正确编码数据,我可以做些什么来找出问题所在?
答案 0 :(得分:0)
在几次测试会话之后,确定节点没有发送UTF-8编码数据,即使请求本身是以UTF-8发送的。修复时没有ETA :(
然而,好消息是php://input
正确处理UTF-u!