strip_tags和htmlentities

Som*_*ody 10 php

我应该htmlentitiesstrip_tags吗?

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

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

Nik*_*kiC 14

第一:只在您需要时立即使用转义方法.即如果你在数据库中插入一些东西,只能为数据库转义它,即应用mysql_real_escape_string(或者PDO->quote你正在使用的任何数据库层).但是还没有为输出应用任何转义.没有strip_tags或类似的.这是因为您可能希望在其他地方使用存储在数据库中的数据,其中HTML转义不是必需的,但只会使文本变得丑陋.

第二:你不应该使用strip_tags.它完全删除了标签.即用户没有得到他输入的相同输出.而是使用htmlspecialchars.它将为用户提供相同的输出,但会使其无害.


nic*_*ckf 10

strip_tags 将删除所有HTML标记:

"<b>foo</b><i>bar</i>" --> "foobar"
Run Code Online (Sandbox Code Playgroud)

htmlentities 将编码HTML中特殊字符的字符

"a & b" --> "a &amp; b"
"<b>foo</b>" --> "&lt;b&gt;foo&lt;/b&gt;"
Run Code Online (Sandbox Code Playgroud)

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

echo htmlentities("<b>foo</b>");
Run Code Online (Sandbox Code Playgroud)

视觉上导致:<b> foo </ b>

echo strip_tags("<b>foo</b>");
Run Code Online (Sandbox Code Playgroud)

结果:foo