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


193

我正在运行以下PHP代码:

<?php 
    </script>
?>

没有解析错误,输出为?>”(示例)。

在类似的情况下,我确实得到了解析错误:

<?php 
    </div>
?>

解析错误:语法错误,...中出现意外的“ <”

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


只是好奇。您正在尝试实现什么目标或正在尝试什么?
阿斯普林2012年

8
实际上,昨晚的情况有所不同,我错过了php结束标记。此后,我有了一个</ script>标记,我花了30多分钟来弄清楚为什么这没有任何错误,但是输出仍然不理想。
Irfan 2012年

7
我不想再生活在这个星球上。
13年

2
PHP就是这样做的。
xiankai 2013年

Answers:


273

这必须是因为有多种方法可以启动一段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

31
请注意,<script language="php">不建议使用。
John Dvorak

4
快速说明,因为我记得该short_open_tag指令进行了一些更改。在PHP 5.4中<?=<?php echo不再需要short_open_tag。在<?=可用和不可用的系统之间切换总是让我感到沮丧。php.net/manual/en/ini.core.php#ini.short-open-tag
克里斯(Chris)

1
@thatmiddleway请注意,官方文档也建议<?php ... ?>php.net/manual/en/language.basic-syntax.phpmode.php
John Dvorak

37

在PHP中,您可以使用script标签打开一个PHP块。

所以你可以使用

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

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

从HTML转义中阅读更多内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.