我在另一个帖子中被告知这段代码非常无用:
function getPost($s) {
if (array_key_exists($s, $_POST))
return mysql_real_escape_string(htmlspecialchars($_POST[$s]));
else return false;
}
function getGet($s) {
if (array_key_exists($s, $_GET))
return mysql_real_escape_string(htmlspecialchars($_GET[$s]));
else return false;
}
有人可以帮助理解为什么以及如何让它更好吗?也欢迎链接或参考。
只是努力改进:)
答案 0 :(得分:11)
嗯,这与magic_quotes_gpc糟糕的方式一样糟糕。这是神奇的,无论你是否愿意,都会逃避一切。相反,处理它所使用的转义,你可以毫无问题地改变事物。所以:
function post($key) {
if(array_key_exists($key, $_POST)) {
return $_POST[$key];
}
return false;
}
在你需要的地方逃跑。否则,事情可能看起来很奇怪,无视它们会破坏这一点。考虑一下;我在文本框中输入我的姓氏O'Hara
。您希望echo
返回,但您可以使用getPost
获取它。这是我得到的:
O \'原
你再次htmlspecialchars
了吗?那么,我得到:
0 \&安培;#39; ARA
或者其他什么。这种情况在我身上发生了很多,而且非常烦人 - 请不要这样做。
答案 1 :(得分:7)
我不会说无用,只是有点误导。您应该在需要转义的上下文中使用之前立即执行转义。例如,如果要将值发送回浏览器,可以执行以下操作:
echo htmlspecialchars($_GET['name']);
但是如果你想将它发送到数据库,你可以这样做:
mysql_query(... 'INSERT INTO users VALUES ("'.mysql_real_escape_string($_GET['name']).'")');
使用您的方法,您可以使用它来解决问题。如果你这样做:
echo getGet('name');
您打算打印出一个MySQL转义字符串而不是实际名称。