In PHP, why does [removed] not show a parse error?

前端 未结 2 1981
陌清茗
陌清茗 2021-01-30 00:48

I was running the following PHP code:


?>

There were no parse errors and the output was \"

相关标签:
2条回答
  • 2021-01-30 01:11

    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.

    0 讨论(0)
  • 2021-01-30 01:12

    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
    
    0 讨论(0)
提交回复
热议问题