【问题标题】:Pass a complete string url in http get params在 http get params 中传递一个完整的字符串 url
【发布时间】:2018-05-13 12:45:53
【问题描述】:

我试试 http://localhost/example?url=http://www.examenple.com/nice=url-get.aspx?n=value1&p=value2&params3=value3

但是当我得到一个带有

的 url 参数时
$url = $_GET["url"];
echo $url;

回显值 http://www.examenple.com/nice=url-get.aspx?n=value1

如何获取完整的url参数

【问题讨论】:

  • 您需要先对其进行 url 编码。
  • 小心使用这种方法,以免自己受到 XSS 攻击,确保在存储/回显之前检查它的 url。 my2cent ;p

标签: php url get


【解决方案1】:

当服务器解析请求 URL 以检测 GET 参数时,它会在每个 & 字符附近拆分 URL:

url=http://www.examenple.com/nice=url-get.aspx?n=value1 
&
p=value2
&
params3=value3

因此$_GET 将有 3 个成员,url、p 和 params3。

为避免这种情况,您需要将每个 & 字符替换为其他内容。这称为 URL 编码。在 PHP 中,有一个函数:urlencode():

$page = "http://www.examenple.com/nice=url-get.aspx?n=value1&p=value2&params3=value3";
echo "http://localhost/example?url=" . urlencode($page);

如果你无法访问源和输入的 URL,但你可以确定只有一个,将传递给你的页面的 url 参数,你可以试试这个:

$url = $_GET["url"];
foreach ($_GET as $key => $value) {
    if ($key == "url") continue;
    $url .= "&" . $key . "=" $value;
}

【讨论】:

  • 从标签来看,我不认为 url 参数是在 PHP 中生成的。
  • @FirstOne 那么它应该。 :)
  • 我的意思是它应该在某个地方生成,因此您可以对其进行编码。您是对的,完全不清楚他是如何获取输入 URL 的。如果我假设的情况并非如此,他应该编辑问题。
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多