何时使用Strip_tags以及何时使用htmlspecialchars()

时间:2018-02-03 00:24:16

标签: php sql

每当我查看某人编写的代码时,他们都会使用

            $var = htmlspecialchars($var);
        $var = trim($var);
        $var = stripcslashes($var);

或只是

strip_tags($var)

何时使用第一个和第二个?

2 个答案:

答案 0 :(得分:4)

htmlspecialcharshtmlentities用于在网页中显示文字。它会将HTML中具有特殊含义的字符(例如围绕标记的<>字符)转换为其实体代码。例如,如果字符串包含

Use <table> to create a table on a web page.

它将转换为

Use &lt;table&gt; to create a table on a web page.

当您在网页上显示字符串时,您将正确地看到预期的消息。

strip_tags完全删除所有HTML标记。所以上面的字符串将转换为:

Use  to create a table on a web page.

如果你显示它,它没有多大意义。这通常用于清理不真正用于显示的输入,并且不应包含任何看起来像HTML标记的内容,例如用户名。虽然根据您对这些值的任何规则进行验证可能会更好(例如,用户名应该只是字母数字字符)。

在我看来,strip_tags()几乎总是错误的工具。这是一个防止XSS攻击的简单方法,因为没有任何HTML标记的代码不能引入脚本。但这是一个广泛的画笔,通常不符合特定的需求。

在处理输入时进行这些转换通常是错误的。当您使用数据时执行它们,执行当时需要的任何转义。所以你使用mysqli_real_escape_string()如果你将变量替换成一个查询(但你真的应该使用预备语句而不是这个),htmlentities()当你在网页上显示它时urlencode() Series当你把它放入URL查询字符串等时

答案 1 :(得分:0)

在我的情况下,我在php中传递url参数时使用htmlspecialchars()。例如

<?php
<a href="pages.php?id=<? echo htmlspecialchars($id); ?>"></a>
?>

这可以防止跨站点脚本,这意味着如果用户放置一些其他代码(如javascript),它将替换保留字符。

我在表单中使用strip_tags,以防止用户将标记插入数据库。