Warum zeigt </ script> in PHP keinen Analysefehler an?

193

Ich habe den folgenden PHP- Code ausgeführt:

<?php 
    </script>
?>

Es gab keine Analysefehler und die Ausgabe war " ?>" ( Beispiel ).

In ähnlichen Fällen wird ein Analysefehler angezeigt:

<?php 
    </div>
?>

Analysefehler: Syntaxfehler, unerwartetes '<' in ...

Warum gibt es nicht <?php </script> ?>den gleichen Fehler?

Irfan
quelle
Nur neugierig. Was wollten Sie erreichen oder woran haben Sie experimentiert?
Asprin
8
Eigentlich war der Fall letzte Nacht anders. Ich habe das PHP-Closing-Tag verpasst. Danach hatte ich ein </ script> -Tag und verbrachte mehr als 30 Minuten damit, herauszufinden, warum dies keinen Fehler enthält, aber die Ausgabe ist immer noch nicht so wünschenswert .
Irfan
7
Ich möchte nicht mehr auf diesem Planeten leben.
Kzqai
2
PHP macht das mit Leuten.
Xiankai

Antworten:

273

Dies muss daran liegen, dass es verschiedene Möglichkeiten gibt, einen PHP-Codeblock zu starten :

  • <? ... ?>(bekannt als short_open_tag)

  • <?php ... ?> (der Standard wirklich)

  • <script language="php"> ... </script> (nicht empfohlen)

  • <% ... %> (veraltetes und entferntes ASP-Tag nach 5.3.0)

Anscheinend können Sie einen PHP-Block auf die eine und auf die andere Weise öffnen. Wusste das nicht.

In Ihrem Code haben Sie den Block mit geöffnet, <?aber PHP erkennt, dass es </script>näher ist. Was passiert ist, war:

<?php       <----- START PHP
</script>   <----- END PHP
?>          <----- JUST GARBAGE IN THE HTML
Pekka
quelle
31
Beachten Sie, dass die Verwendung <script language="php">nicht empfohlen wird.
John Dvorak
4
Kurzer Hinweis, weil ich mich daran erinnerte, dass sich an der short_open_tagRichtlinie etwas geändert hat . In PHP 5.4 benötigt <?=kurz für <?php echonicht mehr das short_open_tag. Das Wechseln zwischen Systemen, wo <?=verfügbar und nicht verfügbar waren, hat mich immer frustriert. php.net/manual/en/ini.core.php#ini.short-open-tag
Chris
1
@thatmiddleway Beachten Sie, dass das offizielle Dokument auch empfiehlt <?php ... ?>: php.net/manual/en/language.basic-syntax.phpmode.php
John Dvorak
37

In PHP können Sie das scriptTag verwenden, um einen PHP-Block zu öffnen.

So können Sie verwenden

<script language="php">
    echo 'hello world';
</script>

In Ihrem Beispiel haben Sie also das normale offene Tag <?phpmit dem schließenden Tag gemischt </script>. Der Parser geht also davon aus, dass der gesamte Text nach dem schließenden Skript-Tag normal ist HTML.

Lesen Sie mehr in Escaping from HTML .

amd
quelle