我想知道使用以下代码是否存在重大缺点:
if(isset($_GET)){
foreach($_GET as $v){
$v = htmlspecialchars($v);
}
}
我意识到可能没有必要在每个变量上使用htmlspecialchars。任何人都知道这是否有好处?
更新:
因为我不认为上面的代码会起作用,所以我用我正在使用的代码更新它(尽管对建议有消极性)。 :)
if(isset($_GET)){
foreach($_GET as $k=>$v){
$_GET[$k] = htmlspecialchars($v);
}
}
答案 0 :(得分:5)
这完全取决于你想做什么。
一般来说,答案是“不”,您应该只为特定目的逃避数据。无目的地随意转发数据并没有帮助,它只会引起进一步的混乱,因为你必须跟踪被转义的内容和方式。
简而言之,保持您的数据以原始方式存储,并在使用时将其专门用于其预期用途:
htmlentities()
。escapeshellcmd()
。escapeshellarg()
。urlencode()
。这种推理适用于递归。因此,如果你想写一个指向HTML输出的GET URL的链接,它就是这样的:
echo "<a href=" . htmlentities("$url?q=" . urlencode($var)) . ">click</a>";
如果在那时你必须记住$var
之前是否曾经被逃脱,以及如何逃脱,那将是非常可怕的。
答案 1 :(得分:3)
不需要毯子转义,它可能对数据有害。不要这样做。
仅将htmlspecialchars()
应用于您要在HTML页面中输出的数据 - 理想情况是在输出之前或之后直接输出。
答案 2 :(得分:1)
它不会影响数字,但它可能适用于不打算放在HTML代码中的字符串参数。
您必须根据其含义对待每个键。概括的可能性还取决于您的应用。
答案 3 :(得分:1)
你这样做的方式是行不通的。您需要将$v
作为引用,并且它会针对需要递归的任何内容(例如$_GET['array'][0]
)而中断。
if(isset($_GET)) {
foreach($_GET as &$v) {
$v = htmlspecialchars($v);
}
}