私は、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>
...
ノードがデータを適切にエンコードしていると仮定すると、何が悪いのかを理解するために自分の側で何ができますか?