我应该在附加的字符串中保留空格还是更改为%20?

时间:2014-03-31 00:27:52

标签: php performance security

在我的网站上,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?

2 个答案:

答案 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));