通过php://input读取UTF-8 SOAP请求


Read UTF-8 SOAP request through php://input

我正在开发一个简单的侦听器,用于与外部节点进行SOAP通信。除了简单的请求之外,node还发送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>
...

假设节点正确编码数据,我可以在我的端做什么来找出什么是错误的?

经过几个测试会话后,确定节点没有发送UTF-8编码的数据,即使请求本身是用UTF-8发送的。没有具体的修复时间:

好消息,然而,php://input正确处理UTF-u !