我有脚本
<?php
$to = $_GET["to"];
header("Location: $to");
?>
如果我称这样的剧本
out.php?to=http://site.ru/page.php?param1=1¶m2=2
param $中的仅为http://site.ru/page.php?param1=1&
如何修复?我想要$to = http://site.ru/page.php?param1=1¶m2=2
答案 0 :(得分:2)
您可以在调用out.php
的网站上转义网址:
<a href="out.php?to=<?PHP echo htmlspecialchars(urlencode($to)); ?>">Go to $to</a>
答案 1 :(得分:1)
&
是URI中的保留字符。当您访问此网址时,¶m2=2
被解释为属于当前网址,不被解释为to
的值。
如果您想按字面意思传输,则必须encode与%26
:
http://site.ru/page.php?param1=1%26param2=2
大多数编程语言都提供了这样做的功能。 (例如JavaScript,PHP)。最好的办法是对整个网址进行编码。
答案 2 :(得分:0)
$ to必须为urlencoded,但请注意您向任何人提供了重定向脚本,因此,任何网络钓鱼者都可以使用它。
因此,最好将URL存储在数据库中并仅传递标识符。
答案 3 :(得分:0)
尝试在base64中对URL进行编码,然后在您将其传递给标题之前已经显示解码的示例中。
答案 4 :(得分:0)
urlencode it
urlencode($to)
答案 5 :(得分:0)
之前我遇到过同样的问题,这就是我所做的:
$arr=explode('?to=',$_SERVER['REQUEST_URI'],2);
$new_to=$arr[1];
现在您可以使用$ new_to变量。 当然,如果你在生产环境中使用它,我会建议编码网址,因为建议的其他答案。我用它来测试curl脚本。以这种方式获取变量有很多缺陷,所以要小心。
答案 6 :(得分:-1)
您可以使用名为“html_entity_decode”的函数
Click Here for more information about this function
或使用 md5 功能加密网址,然后在将其放入变量时对其进行解密。
我希望这可以帮到你