从 HTML 中转义

PHP 解析器会忽略一对开始和结束标记之外的所有内容,这允许 PHP 文件具有混合内容。这允许将 PHP 嵌入 HTML 文档中,例如创建模板。

<p>这将被 PHP 忽略,并由浏览器显示。</p>
<?php echo '虽然这将被解析。'; ?>
<p>这也会被 PHP 忽略,并由浏览器显示。</p>
这按预期工作,因为当 PHP 解释器遇到 ?> 结束标记时,它只会简单地开始输出它找到的任何内容(除了紧随其后的换行符 - 请参阅 指令分隔符),直到遇到另一个开始标记,除非在条件语句的中间,在这种情况下,解释器将在决定跳过什么之前确定条件的结果。请参见下一个示例。

使用带有条件的结构

示例 #1 使用条件进行高级转义

<?php if ($expression == true): ?>
如果表达式为真,则将显示此内容。
<?php else: ?>
否则将显示此内容。
<?php endif; ?>
在此示例中,PHP 将跳过条件不满足的块,即使它们在 PHP 开始/结束标记之外;PHP 根据条件跳过它们,因为 PHP 解释器将跳过包含在不满足的条件中的块。

对于输出大块文本,退出 PHP 解析模式通常比通过 echoprint 发送所有文本效率更高。

注意:

如果 PHP 嵌入在 XML 或 XHTML 中,则必须使用正常的 PHP <?php ?> 才能保持与标准的兼容性。

添加笔记

用户贡献的笔记 4 个笔记

397
quickfur at quickfur dot ath dot cx
14 年前
当文档说 PHP 解析器忽略 <?php ... ?> 标记之外的所有内容时,这意味着字面上的所有内容。包括你通常不会认为“有效”的内容,例如以下内容

<html><body>
<p<?php if ($highlight): ?> class="highlight"<?php endif;?>>这是一个段落。</p>
</body></html>

请注意,PHP 代码是如何嵌入到 HTML 开始标记的中间的。PHP 解析器不在乎它是否在开始标记的中间,也不需要它被关闭。它也不在乎 ?> 结束标记之后的 HTML 开始标记的结束。因此,如果 $highlight 为真,则输出将为

<html><body>
<p class="highlight">这是一个段落。</p>
</body></html>

否则,它将为

<html><body>
<p>这是一个段落。</p>
</body></html>

使用这种方法,您可以根据某些 PHP 条件创建具有可选属性的 HTML 标记。非常灵活且有用!
73
ravenswd at gmail dot com
15 年前
您需要注意 PHP 的一个方面,即 ?> 将使您退出 PHP 代码并进入 HTML,即使它出现在 // 注释中。(这并不适用于 /* */ 注释。)这会导致意外的结果。例如,取此行

<?php
$file_contents
= '<?php die(); ?>' . "\n";
?>

如果您尝试通过将其转换为注释来删除它,您将得到以下内容

<?php
// $file_contents = '<?php die(); ?>' . "\n";
?>

这导致 ' . "\n"; (以及后面的行中包含的内容)被输出到您的 HTML 页面。

解决方法是使用 /* */ 标记将其注释掉,或将该行重写为

<?php
$file_contents
= '<' . '?php die(); ?' . '>' . "\n";
?>
24
sgurukrupa at gmail dot com
10 年前
虽然在正文中没有特别指出,但从 HTML 中转义也适用于其他控制语句

<?php for ($i = 0; $i < 5; ++$i): ?>
你好!
<?php endfor; ?>

当执行上述代码片段时,我们将得到以下输出

你好!
你好!
你好!
你好!
-10
gazianis005 at gmail dot com
1 年前
从 HTML 中转义有两种类型。
1. 使用一对开始和结束标记之外的正常转义
2. 使用条件的高级转义。

正常转义的示例

<p>这将被 php 解析器忽略,并由浏览器显示</p>
<?php echo '这将被解析';?>
<>这也将被 php 解析器忽略,并由浏览器显示</>

高级转义的示例

<?php if($expression == true): ?>
如果表达式为真,则将显示此内容
<?php else : ?>
否则将显示此内容
<?php endif ;?>
To Top