strip_tags和htmlentities

时间:2011-04-26 09:18:17

标签: php

我应该将htmlentities用于strip_tags吗?

我正在使用strip_tags添加到数据库并考虑在输出中删除htmlentities;我希望在服务器上生成HTML时避免不必要的处理。

在没有允许标签的情况下仅使用strip_tags是否安全?

4 个答案:

答案 0 :(得分:14)

首先:只在您需要时立即使用转义方法。即如果您将某些内容插入数据库,则只为数据库转义它,即应用mysql_real_escape_string(或PDO->quote或您正在使用的任何数据库层)。但是还没有为输出应用任何转义。尚未strip_tags或类似。这是因为您可能希望在其他地方使用存储在数据库中的数据,其中不需要HTML转义,但只会使文本变得丑陋。

第二:你不应该使用strip_tags。它完全删除了标签。即用户输入的输出与输入的输出不同。请使用htmlspecialchars。它将为用户提供相同的输出,但会使其无害。

答案 1 :(得分:10)

strip_tags将删除所有HTML标记:

"<b>foo</b><i>bar</i>" --> "foobar"

htmlentities将对HTML中特殊字符的字符进行编码

"a & b" --> "a &amp; b"
"<b>foo</b>" --> "&lt;b&gt;foo&lt;/b&gt;"

如果您使用htmlentities,那么当您将字符串输出到浏览器时,用户应该在输入时看到文本,而不是HTML

echo htmlentities("<b>foo</b>");

视觉效果为:&lt; b&gt; foo&lt; / b&gt;

echo strip_tags("<b>foo</b>");

结果:foo

答案 2 :(得分:3)

我不会使用htmlentities,因为这将允许您将字符串原样插入数据库,对帐户详细信息或论坛没有好处。

使用mysql_real_escape_string插入数据库,使用strip_tags从数据库中重新创建并回显到屏幕

答案 3 :(得分:0)

尝试这个并看到差异:

 <?php

  $d= isset($argv[1]) ? $argv[1] : "empty argv[1]".PHP_EOL;
  echo  strip_tags(htmlentities($d)) . PHP_EOL;
  echo  htmlentities(strip_tags($d)) . PHP_EOL;

 ?>

打开cmd或您的终端并键入以下内容;

  php your_script.php "<br>foo</br>"

这应该得到你想要的和安全的!

相关问题