好的,所有这些不同的字符串转义函数,例如htmlentities()
,mysql_real_escape_string()
,addslashes()
但是我应该在什么情况下使用哪种? 资源和意见请:)
答案 0 :(得分:9)
<b>Something</b>
写入HTML页面,您只会看到 Something (即原始文本以粗体显示) - 您将看不到它周围的粗体标记。使用htmlentities('<b>Something</b>')
将代码转换为&lt; b&gt; Something&lt; b&gt;所以在浏览器中你会看到三角括号。总结:
答案 1 :(得分:3)
我应该在什么情况下使用?
htmlspecialchars()
。用于将不受信任的用户输入打印到浏览器中。答案 2 :(得分:1)
将数据插入mysql数据库时请使用:
mysql_real_escape_string()
当您要显示用户提供的内容时:
htmlentities()
如果您的数据库在php中没有自己的功能,您可以使用:
addslashes()
,但不建议在具有更好的特定内容时使用(mysql_real_escape_string())。
有关详细信息,请参阅此处:
Htmlentities vs addslashes vs mysqli_real_escape_string
P.S你应该使用mysqli_real_escape_string(),而不是mysql_real_escape_string()。
编辑:
要真正防止攻击,这是一本很好的阅读材料:http://www.php.net/manual/en/security.database.sql-injection.php ...
您还应该查看准备好的陈述:http://www.php.net/manual/en/mysqli.prepare.php
这里有很多关于堆栈溢出的信息。
答案 3 :(得分:0)
这是同一主题的变体:
$bar = "O'Reilly";
"foo = '$bar'"; // foo = 'O'Reilly' -> invalid syntax
如果字符串应遵循特殊语法,则将字符串盲连接在一起可能会导致语法违规。充其量这是一个烦恼,最糟糕的是安全问题。转义值可以防止出现这些问题。通用示例:
"foo = '" . escape($bar) . "'"; // foo = 'O\'Reilly'
所有不同的函数都是针对不同的语法正确转义值:
htmlentities
用于转义HTML的输出
mysql_real_escape_string
用于转义SQL查询的值
addslashes
...对任何事情都没有好处,不要使用。
json_encode
用于编码/转义/转换Javascript格式的值。