Ein paar SOAP Notizen
Oftmals ist es so dass ein SOAP Client die Daten nicht in einem der üblichen Request Parameter sendet. Wie z.b. $_POST, $_GET oder als Fileupload, sondern in einer reichlich schlecht dokumentierten Variable namens $GLOBALS['HTTP_RAW_POST_DATA'] oder $HTTP_RAW_POST_DATA.
Der richtige Content Type für die Antwort eines SOAP Servers ist application/soap+xml also
header('Content-Type: application/soap+xml;charset=utf-8');
Beim senden der Antwort sollte darauf geachtet werden alle Zeilenumbrüche und Tabs zu entfernen. Auch alle Quotes im Antworttext sollten transformiert werden.
$message = str_replace("<", "&amp;lt;", $message); $message = str_replace(">", "&amp;gt;", $message); $message = str_replace("\"", "&amp;quot;", $message);
$message enthält in diesem eine Antwort in xml
Manche Systeme tranformieren die Inhalte einer SOAP Kommunikation nach UTF-8. Man findet dann seltsame Konstrukte wie ö in den Antworten. Zumindest für die deutschen Sonderzeichen hilft untenstehende Replace-Orgie:
// Apply some extra transformations accordingly to // http://www.utf8-zeichentabelle.de/unicode-utf8-table.pl?number=1024&htmlent=1 $xml = str_replace("&#xC3;&#xB6;", "ö", $xml); $xml = str_replace("&#xC3;&#x96;", "Ö", $xml); $xml = str_replace("&#xC3;&#xA4;", "ä", $xml); $xml = str_replace("&#xC3;&#x84;", "Ä", $xml); $xml = str_replace("&#xC3;&#x9C;", "Ü", $xml); $xml = str_replace("&#xC3;&#xBC;", "ü", $xml); $xml = str_replace("&#xC3;&#xBC;", "ü", $xml); $xml = str_replace("&#xC3;&#x9F;", "ß", $xml);