web-dev-qa-db-fra.com

En PHP, pourquoi </script> n'affiche-t-il pas une erreur d'analyse?

J'exécutais le code PHP suivant:

<?php 
    </script>
?>

Il n'y a eu aucune erreur d'analyse et la sortie était "?> "( exemple ).

Dans des cas similaires, j'obtiens une erreur d'analyse:

<?php 
    </div>
?>

Erreur d'analyse: erreur de syntaxe, '<' inattendu dans ...

Pourquoi <?php </script> ?> donne la même erreur?

192
Irfan

Cela doit être dû au fait il existe différentes manières de démarrer un bloc de PHP :

  • <? ... ?> (connu comme short_open_tag)

  • <?php ... ?> (vraiment la norme)

  • <script language="php"> ... </script> (non recommandé)

  • <% ... %> (balise de style ASP obsolète et supprimée après 5.3.0)

Apparemment, vous pouvez ouvrir un bloc PHP dans un sens et le fermer dans l'autre. Je ne le savais pas.

Donc, dans votre code, vous avez ouvert le bloc en utilisant <? mais PHP reconnaît </script> comme le plus proche. Ce qui s'est passé était:

<?php       <----- START PHP
</script>   <----- END PHP
?>          <----- JUST GARBAGE IN THE HTML
273
Pekka 웃

En PHP, vous pouvez utiliser la balise script pour ouvrir un bloc PHP.

Vous pouvez donc utiliser

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

Donc, dans votre exemple, vous avez mélangé la balise ouverte normale, <?php, avec la balise de fermeture, </script>. L'analyseur suppose donc que tout le texte après la balise de script de fermeture est normal HTML.

En savoir plus dans Échapper au HTML.

37
amd