在我的网站上,POST通常按如下方式处理:
$login_id = mysqli_real_escape_string($cxn, $_SESSION['login_id']);
if (isset($_POST['var'])) {
$var = strip_tags(trim($_POST['var']));
$sql=mysqli_query($cxn, "UPDATE table1 SET column1 =
'".mysqli_real_escape_string($cxn, $var)."' WHERE login_id = '$login_id'");
if (!$sql) {
$M = 'There was a problem with the server';
}
}
header('Location: page.php?message='.$M);
}
但是,我注意到我发送到的位置(如果查询有问题)包含%20代替空格(并非意外):
http://www.mysite.com/page.php?message=There%20was%20a%20problem%20with%20the%20server
我检查了我的error_log,发现它没有报告我对%20的使用不足甚至是通知或警告。对于性能/安全/等。 (我的网站包含几十个这样的字符串),是否有任何理由我应该将%20包含在我的字符串= $ M中,并传递给page.php?
答案 0 :(得分:3)
要直接回答您的问题,您应该对URL中使用的任何值进行URL编码,例如
header('Location: page.php?message=' . urlencode($M));
exit;
这些空间可能正由您的浏览器处理,但如果您的字符串包含类似&符号(&
)
答案 1 :(得分:2)
创建网址时,您应该首先转义它们。正如@Phil所说,urlencode($M)
是最佳选择。
$login_id = mysqli_real_escape_string($cxn, $_SESSION['login_id']);
if (isset($_POST['var'])) {
$var = strip_tags(trim($_POST['var']));
$sql=mysqli_query($cxn, "UPDATE table1 SET column1 =
'".mysqli_real_escape_string($cxn, $var)."' WHERE login_id = '$login_id'");
if (!$sql) {
$M = 'There was a problem with the server';
}
}
header('Location: page.php?message='.urlencode($M));