193

I was running the following PHP code:

<?php 
    </script>
?>

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

In similar cases I do get a parse error:

<?php 
    </div>
?>

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

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

4
  • Just curious. What were trying to achieve or what was it that you were experimenting on? Commented Nov 5, 2012 at 8:22
  • 8
    Actually the case was different last night I missed the php closing tag.And after this I had a </script> tag and I spent more than 30 min to figure out why this does not have any error buts still the output is not as desire. Commented Nov 5, 2012 at 8:25
  • 7
    I don't want to live on this planet any more. Commented May 6, 2013 at 16:48
  • 2
    PHP does that to people. Commented Sep 29, 2013 at 11:12

2 Answers 2

272

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
Sign up to request clarification or add additional context in comments.

3 Comments

Note that using <script language="php"> is not recommended.
Quick note, because I remembered there was some change with the short_open_tag directive. In PHP 5.4 <?= short for <?php echo no longer requires the short_open_tag. Going between systems where <?= was available and not available always frustrated me. php.net/manual/en/ini.core.php#ini.short-open-tag
@thatmiddleway Note that the official document recommends <?php ... ?> as well: php.net/manual/en/language.basic-syntax.phpmode.php
37

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

So you can use

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

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.