【问题标题】:In PHP, why does </script> not show a parse error?在 PHP 中,为什么 </script> 不显示解析错误?
【发布时间】:2012-10-25 01:32:48
【问题描述】:

我正在运行以下PHP 代码:

<?php 
    </script>
?>

没有解析错误,输出为?&gt;”(example)。

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

<?php 
    </div>
?>

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

为什么&lt;?php &lt;/script&gt; ?&gt; 没有给出同样的错误?

【问题讨论】:

  • 只是好奇。想要达到什么目标,或者您正在尝试什么?
  • 其实昨晚的情况不同,我错过了php结束标签。在此之后我有一个标签,我花了30多分钟才弄清楚为什么这没有任何错误但输出仍然不如预期。
  • 我不想再生活在这个星球上了。
  • PHP 对人们这样做。

标签: php syntax parse-error


【解决方案1】:

这一定是因为there are various ways of starting a block of PHP code:

  • &lt;? ... ?&gt;(称为short_open_tag

  • &lt;?php ... ?&gt;(真的是标准)

  • &lt;script language="php"&gt; ... &lt;/script&gt;(不推荐)

  • &lt;% ... %&gt;(在 5.3.0 之后已弃用并删除了 ASP 样式标签)

显然,您可以以一种方式打开 PHP 块,并以另一种方式关闭它。不知道。

因此,在您的代码中,您使用 &lt;? 打开了块,但 PHP 将 &lt;/script&gt; 识别为更接近的。发生的事情是:

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

【讨论】:

【解决方案2】:

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

所以你可以使用

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

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

Escaping from HTML 了解更多信息。

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多