如何避免错误的GET请求由" +"符号?

时间:2016-04-13 16:10:31

标签: php get

我的网址路径:

https://mypage/main.php?dir=farm/1234_animal_fred+sam_cats

我使用GET方法请求数据:

$dir = $_GET['dir'];
echo $dir;

但我的结果是

farm/1234_animal_fred sam_cats

3 个答案:

答案 0 :(得分:2)

尽管Unex的答案在这种特殊情况下是正确的,但我不确定他是否会遗漏可能导致某些事情失败的其他角色,或者更糟糕的是,打开你的角色XSS漏洞。因此,不要通过以下方式使其在这一个案例中发挥作用:

$url = str_replace('+', '%2B', $url);

您希望将其用于所有案例。因此,假设您的数据库中包含以下内容:

$file_path = 'farm/1234_animal_fred+sam_cats';

要使此功能正常运行,您需要执行urlencode(),但是从this answer开始,您会注意到它不足以保护您免受XSS攻击。因此,您还需要在字符串上使用htmlspecialchars()

$url = 'https://mypage/main.php?dir=';
$file_path = 'farm/1234_animal_fred+sam_cats';
$url .= htmlspecialchars(urlencode($file_path));

echo $url; // https://mypage/main.php?dir=farm%2F1234_animal_fred%2Bsam_cats

当转到此URL时,您可以看到PHP获得了正确的值:

print_r($_GET) output:
Array
(
    [dir] => farm/1234_animal_fred+sam_cats
)

答案 1 :(得分:1)

请勿在您的网址中使用+,而是使用%2B;

结果如下:

https://mypage/main.php?dir=farm/1234_animal_fred%2Bsam_cats

希望这有帮助,

答案 2 :(得分:-2)

您应始终使用原始 urlencode($ url)对网址进行编码。

http://php.net/manual/en/function.rawurlencode.php

积分给评论者,对不起,我要快速回复。