In PHP, why does </script> not show a parse error?

04/01/2020 08:30:02

I was running the following PHP code:


There were no parse errors and the output was "?>" (example).

In similar cases I do get a parse error:


Parse error: syntax error, unexpected '<' in ...

Why doesn't <?php </script> ?> give the same error?

Verified Answer (273 Votes)

11/05/2012 13:23:39

This must be because there are various ways of starting a block of PHP code:

  • <? ... ?> (known as short_open_tag)

  • <?php ... ?> (the standard really)

  • <script language="php"> ... </script> (not recommended)

  • <% ... %> (deprecated and removed ASP-style tag after 5.3.0)

Apparently, you can open a PHP block one way, and close it the other. Didn't know that.

So in your code, you opened the block using <? but PHP recognizes </script> as the closer. What happened was:

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

Answer #2 (37 Votes)

11/05/2012 13:29:12

In PHP, you can use the script tag to open a PHP block.

So you can use

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

So in your example you have mixed the normal open tag, <?php, with the closing tag, </script>. So the parser assumes that all the text after the closing script tag is normal HTML.

Read more in Escaping from HTML.

Hack Hex uses Stack Exchance API by the Stack Exchange Inc. to scrape questions/answers under Creative Commons license.