在PHP中,为什么</ script>不显示解析错误?

Irf*_*fan 193 php syntax parse-error

我正在运行以下PHP代码:

<?php 
    </script>
?>
Run Code Online (Sandbox Code Playgroud)

没有解析错误,输出是 " ?>"(例子).

在类似的情况下,我得到一个解析错误:

<?php 
    </div>
?>
Run Code Online (Sandbox Code Playgroud)

解析错误:语法错误,意外的'<'在......

为什么不<?php </script> ?>给出同样的错误?

Pek*_*ica 273

这必须是因为有多种方法可以启动PHP代码块:

  • <? ... ?>(称为short_open_tag)

  • <?php ... ?> (标准真的)

  • <script language="php"> ... </script> (不建议)

  • <% ... %> (5.3.0之后弃用并删除ASP样式标记)

显然,您可以单向打开PHP块,然后将其关闭.不知道那个.

因此,在您的代码中,您使用了<?PHP 来打开块,但PHP认为</script>它更接近.发生的事情是:

<?php       <----- START PHP
</script>   <----- END PHP
?>          <----- JUST GARBAGE IN THE HTML
Run Code Online (Sandbox Code Playgroud)

  • 请注意,不建议使用`<script language ="php">`. (31认同)
  • 是的甚至`<script language ="php"> echo"lol"; ?>`是有效的PHP代码.... (9认同)
  • 请注意,因为我记得`short_open_tag`指令有一些变化.在PHP 5.4中`<?=``<?php echo`的缩写不再需要`short_open_tag`.在`<?=`可用且不可用的系统之间进行总是让我感到沮丧.http://www.php.net/manual/en/ini.core.php#ini.short-open-tag (4认同)

amd*_*amd 37

在PHP中,您可以使用script标记打开PHP块.

所以你可以使用

<script language="php">
    echo 'hello world';
</script>
Run Code Online (Sandbox Code Playgroud)

因此,在您的示例中,您将正常的开放标记<?php与结束标记混合在一起</script>.因此,解析器假定关闭脚本标记之后的所有文本都是正常的HTML.

阅读HTML中的更多内容.