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

橙三吉。 提交于 2019-12-03 00:33:54

问题


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?


回答1:


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



回答2:


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.



来源:https://stackoverflow.com/questions/13228306/in-php-why-does-script-not-show-a-parse-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!