Mailinglisten-Archive |
On Sunday 02 January 2005 12:00, Norbert Pfeiffer wrote: > Frueher, als hier noch aktive PHP-Entwickler auf ich weiß das hier noch PHP-Entwickler Abonnenten sind auch wenn sie nicht alles mitlesen und erst recht nicht ständig was posten ... Aber zum eigentlichen Problem: Das Problem, wie hier ja schon des öfteren stand sind die short_open_tags "<?". Die bringen den Parser dazu vom INITIAL in den ST_IN_SCRIPTING Modus zuschalten und somit den Code als PHP zu parsen. Dadurch reicht es im Skripts <? do_something(); ?> statt <?php do_something(); ?> zu schreiben. Folglich interpretiert er bei der Eingabe <?xml version="1.0" ?> den Teil xml version="1.0" als PHP Code was natürlich kein PHP Code ist. Jetzt kann man dem Parser beibringen (was auch nicht sonderlich schwer ist), dass <?xml anders behandelt werden soll. Dies löst das Problem aber nicht. Entsprechend der XML-Spezifikation kommt in einer processing instruction, mit solch einer haben wir es bei XML mit dem <? ... ?> Zeug zu tun, nach dem initialen <? das Ziel der selben, wobei selbiges nicht weiter spezifiziert ist sondern vom XML Parser verarbeitet wird. Folglich kann man da beliebige Ziele definieren. Ein bekanntes Beispiel neben <?xml .. ?> ist z.B. <?xsl ?> aber auch <?php ?> ist zunächstmal nichts anderes. Jetzt könnte man den Parser so umschreiben, dass er nach einem <? schaut ob danach PHP-Code oder eine Processing Intstruction kommt aber auch das bringt nichts, da solch wunderbare Dinge wie <?echo 13435; ?> 100%ig gültig in PHP wäre aber ebenso mit XML (auch wenn ich mir keinen Anwendungsfall vorstellen kann, aber sag niemals nie), dafür hätte man einen deutlich komplexeren Parser und immernoch eine unklare Situation. Aus Entwickler-Sichte gäbe es nur eine mögliche Option um das zu umgehen: short_open_tag auf Off schalten - das würde aber bei ebensoviele Skripts zu Problemen führen wie bei register_globals - wobei hier mit einem einfachen Suchen&Ersetzen weit mehr gefixt werden kann. Aus Anwender-Sicht bleibt somit nur die Möglichkeit die PI per echo auszugeben, was auch nicht so umständlich ist, da man ja in aller Regel eh einen entsprechenden Content-type-Header voraus schicken will: <?php header('Content-type: text/xml'); echo '<?xml version="1.0" ?>'; ?> in der Hoffnung das verständlich erklärt zu haben, johannes
php::bar PHP Wiki - Listenarchive