我的网址路径:
https://mypage/main.php?dir=farm/1234_animal_fred+sam_cats
我使用GET方法请求数据:
$dir = $_GET['dir'];
echo $dir;
但我的结果是
farm/1234_animal_fred sam_cats
答案 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
积分给评论者,对不起,我要快速回复。