我应该将htmlentities
用于strip_tags
吗?
我正在使用strip_tags
添加到数据库并考虑在输出中删除htmlentities
;我希望在服务器上生成HTML时避免不必要的处理。
在没有允许标签的情况下仅使用strip_tags
是否安全?
答案 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 & b"
"<b>foo</b>" --> "<b>foo</b>"
如果您使用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>"
这应该得到你想要的和安全的!