PHP echo 与 PHP short echo 标签

他们在安全方面是平等的吗? 我被告知使用

<?=$function_here?>

不太安全,而且会减慢页面加载时间。 我严格偏向于使用回声。

优点和缺点是什么?

92505 次浏览

首先,<?= 不是是一个简短的开放标签,而 速记回声则是与 <?php echo相同的。而且它不能被禁用。因此,它的安全使用意味着它总是启用。

保安的安全性来说,根据输出介质的规则,输出必须是 都是编码的

例如,当在 HTML 中回显数据时,它必须是 HTML 编码的:

 <?= htmlspecialchars($function_here, ENT_QUOTES) ?>

或者,当在 JavasScript 中回显数据时,它必须是 javascript 编码的:

 <script>var=<?= json_encode($function_here) ?>

或者,如果同时使用 HTML 和 JS,那么必须使用 都有编码:

<?php foreach($links as $label => $url): ?>
<br>
<form method="post">
<button class="my" onclick="<?=htmlspecialchars("window.open(".json_encode($url).")", ENT_QUOTES) ?>">
<?=htmlspecialchars($label, ENT_QUOTES) ?>
</button>
</form>
<?php endforeach ?>

说到短的开放标记,只有一个 <?,而且并不总是启用(请参阅 short_open_tag指令)。

实际上,在 PHP 5.3.0提供的 PHP.ini-production 文件中,默认情况下禁用了它们:

$ grep 'short_open' php.ini-production
; short_open_tag
short_open_tag = Off

因此,在您想要分发的应用程序中使用它们可能不是一个好主意: 如果不启用它们,您的应用程序将无法工作。

另一方面,<?php不能被禁用——因此,使用这个函数是最安全的,即使写入时间更长。

Echo 通常更好用,因为..。

  1. 它支持良好的编程风格。
  2. 在 php.ini 中不能关闭它(可以使用短标记)
  3. 在 PHP6中将删除短标记)

但是,它们通常是一样的。参见:

  1. PHP 短标签可以使用吗?
  2. PHP 中的 echo 和 print 有什么不同?

除了关于使用短标签是否是一个好主意以及是否应该认为不应该使用短标签的整个半宗教辩论之外,最初的问题是使用短标签有多安全或不安全。

简单地说,如果您在不支持短标记的服务器上使用短标记,那么您的 PHP 代码的一部分可能会暴露出来,这可以被认为是一个安全漏洞。

您应该使用 < ?= 然后让你的系统管理员/主机打开 short _ open _ tag,它不会关闭任何缺点,也不会减速,解析器会查找 < ?就像它寻找 < ?Php 中的索引,二进制搜索(也许 < ?PHP 由于解析的降低而变慢)。

而且,已经在 PHP 5.5 < ?= 将在默认情况下打开,并且在长期 < ?= 将首选而 < ?半废弃的回声。

如果还不确定的话,谷歌一下会有很大帮助

只是为了增加另一个 PSR 来源: http://www.php-fig.org/psr/psr-1/

PHP 代码必须使用长标记或短回显标记; 它必须不使用其他标记变体。

指明:

 <?php ?> and <?= ?>