Ein XML aus Delphi.net nach PHP

XChris

Erfahrenes Mitglied
Hallo,

ich denke, dies ist ein PHP Problem. Ich bastle ein XML um es auf einen Webserver zu schieben. Der Client (in Delphi.net) schreibt in einen Stream und auf einem Webserver soll PHP die Daten auffangen.

Mein XML:
PHP:
<?xml version="1.0" encoding="charset=ISO-8859-1"?>
<EnvCrypt xmlns="http://192.168.0.203/EnvisysWebService/Server/envisys.xsd">
<Info>Register</Info>
<Version>1.0</Version>
<Data>Datenklumpen#/?-0</Data>
</EnvCrypt>

Mein PHP Code:
PHP:
<?php
header("Content-type: text/plain");

include("lib/serverlib_registrierung.php");

// Aufbereiten
foreach($_POST as $k=>$v) $Inhalt = $k.$v;
if (get_magic_quotes_gpc()) 
{  	
	$Inhalt = stripslashes($Inhalt);
}
$Inhalt = str_replace("_"," ", $Inhalt);

// In eine Datei
$text=$Inhalt;
 $fp = fopen ("test.txt" , "a+"); // Datei öffnen
 fwrite ($fp , $text); // Datei-Inhalt in die Datei schreiben
 fclose ($fp); // Datei schließen

// XML
$XMLPars = new Registrierung($Inhalt);
?>

und in einer ausgelagerten Datei:

PHP:
<?php
header("Content-type: text/plain");
//include("lib/serverlib_db.php");
class Registrierung
{  
	private $xml;	

	public function Registrierung($temp)
	{	   
	  	$xml = simplexml_load_string($temp);  	
	}
	
	public function ExecuteReg()
	{
	 	$db = new DBAccess($this->xml); 
	 	$db->Registration();
                // TODO: Weiter
	}	
}

?>

Nun erhalte ich im Client folgende Fehlermeldung:

OK<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : expected '=' in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;charset=ISO-8859-1&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : Malformed declaration expecting version in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;charset=ISO-8859-1&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : Blank needed here in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;charset=ISO-8859-1&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : parsing XML declaration: '?&gt;' expected in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;charset=ISO-8859-1&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />

Sicherheitshalber, habe ich mir (siehe oben) die POST Variable, nachdem ich sie umgeformt habe nochmal in eine Datei geschrieben (Orginal aus dem PHP file, kurz vor dem Aufruf der SimpleXMLElement Instanzierung):

<?xml version"1.0" encoding="charset=ISO-8859-1"?>
<EnvCrypt xmlns="http://192.168.0.203/EnvisysWebService/Server/envisys.xsd">
<Info>Register</Info>
<Version>1.0</Version>
<Data>Datenklumpen#/?-0</Data>
</EnvCrypt>


Eigentlich sollte mein Problem trival sein. Ich bekomme über POST einen Datenhaufen, den ich untersuchen möchte und dann als STRING in ein SimpleXMLElement Stopfen. Dies sollte eigentlich so gehen:

$xml = new SimpleXMLElement($xmlstr);

Aber seit 3 Tagen ärgere ich mich mit diesen Sch .... rum. Wäre über Hilfe in PHP sehr dankbar.

Chris
 
Gumbo hat gesagt.:
Das „charset=“ hat im encoding-Attributwert auch nichts zu suchen. Entferne das erst mal.

Huch!? Wie kam das dorthin! Ich hab diesen Teil mir viel zu oft schon angesehen.
So nun siehts so aus (Kopie des POST Inhaltes aus der server.php, bevor es an SimpleXml Element gegeben wird:)

<?xml version"1.0" encoding="utf-8"?>
<EnvCrypt xmlns="http://192.168.0.203/EnvisysWebService/Server/envisys.xsd">
<Info>IIII</Info>
<Version>AAAA</Version>
<Data>BBBB</Data>
</EnvCrypt>

Fehler:

OK<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : expected '=' in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : Malformed declaration expecting version in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : Blank needed here in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: Entity: line 1: parser error : parsing XML declaration: '?&gt;' expected in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: &lt;?xml version&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: simplexml_load_string() [<a href='function.simplexml-load-string'>function.simplexml-load-string</a>]: ^ in <b>C:\wamp\www\EnvisysWebService\Server\lib\serverlib_registrierung.php</b> on line <b>19</b><br />

So wies aussieht, ist er mit dem String immer nich nicht zufrieden :-(
 
Das stimmt, aber wieso verschwindet "es"?

Das ist doch sehr merkwürdig.

Oft ist auch bei "<?XML version" ein Unterstrich, also so "<?XML_version" . Das habe ich mit

PHP:
$Inhalt = str_replace("_"," ", $Inhalt);

erschlagen. Aber schick ist das nicht. Mich interssiert das Warum!

Ich habe den String, den ich Speichere (Logdatei) mal direkt genommen und in PHP direkt eingeben:

PHP:
$Inhalt = <<<XML
<?xml version='1.0' standalone='yes'?>
<EnvCrypt xmlns='http://192.168.0.203/EnvisysWebService/Server/envisys.xsd'>
<Info>IIII</Info>
<Version>AAAA</Version>
<Data>BBBB</Data>
</EnvCrypt>
XML;

... und siehe da - es geht. Es MUSS mit dem Encoding zu tun haben.

Chris
 
Die Angabe der Zeichenkodierung ist nur dann notwendig, wenn sie nicht UTF-8 oder UTF-16 entspricht. Denn dies ist die Standardkodierung für XML. Ich weiß allerdings nicht, ob SimpleXML dies überhaupt berücksichtigt.
 
Hallo,

ich habe noch ein wenige rumexperimentiert. Unter anderem habe ich den STREAM direkt nach dem Empfangen in POST untersucht und nach der Behandlung (siehe oben).

PHP macht folgendes:

Es haut mir einen Unterstrich in den XML Tag, maskiert " mit / und löscht einige =

Nun meine Frage, wie bekomme ich PHP dazu, meinen Datenstream so darzustellen, dass er unverändert ankommt?
Hier im Forum gibt es mit Umlauten und dem Fileload einen ganz ähnlichen Thread ...

Chris
 
Zurück