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

我正在运行以下 PHP代码:

<?php
</script>
?>

没有解析错误和 输出是?>”(例子)。

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

<?php
</div>
?>

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

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

9463 次浏览

这一定是因为 启动 PHP 代码块有多种方式:

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

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

  • <script language="php"> ... </script>(不推荐)

  • <% ... %>(在5.3.0之后不再推荐和删除 ASP 样式的标记)

显然,你可以用一种方式打开 PHP 块,然后用另一种方式关闭它。

因此,在代码中,您使用 <?打开代码块,但 PHP 将 </script>识别为最接近的代码块:

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

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

所以你可以利用

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

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

阅读更多 翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳