phpbar.de logo

Mailinglisten-Archive

[php] mal so - mal so ...

[php] mal so - mal so ...

Johannes Schlueter schlueter at phpbar.de
Die Jan 4 22:29:22 CET 2005


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