【问题标题】:How to encode, send in a query, and retrieve a url如何编码、发送查询和检索 url
【发布时间】:2012-06-05 23:43:43
【问题描述】:

我正在尝试传递一个用于创建 iframe 的 url 作为查询字符串的参数。因为我传递的 url 包含一个 & 符号,所以我使用 'urlencode' 对 url 进行编码,然后将其附加到查询字符串中。

<?php
$url = "http://www.somesite.com/index.php?option=content&view=article&id=1234:some+article";
$url_encoded = urlencode($url);
?>

<a href="http://www.mysite.com/external_article_iframe/?url=<?php echo $url_encoded ?>" target="_blank"></a>

在我要创建 iframe 的页面上,我使用 $_GET 变量检索 url 参数。

<?php
$iframe_source = $_GET[$url];
?>

<iframe id="external-link-frame" src="<?php echo $iframe_source ?>"></iframe>

但是,$_GET 只检索参数值的一部分,直到编码的 & 符号。

<?php echo $_GET[$url]; //outputs http://www.somesite.com/index.php?option=content ?>

我必须做什么才能发送整个 url,包括作为其自身查询字符串一部分的参数。

更新:我可以通过对 url 进行两次编码来做到这一点

urlencode(urlencode($url));

看看:https://stackoverflow.com/a/2433211/1359529

【问题讨论】:

  • 最后的 url 是什么? PS:你的代码是一个巨大的 XSS 漏洞
  • 不应该是echo $_GET['url']而不是$_GET[$url]吗?
  • 嘿Zerkms,不知道你的最终网址是什么意思?另外,请告诉我更多关于如何避免 XSS 漏洞的信息。我不明白这种攻击是如何运作的。
  • 您可能还需要在将其添加为 iframe 的 src 之前对其进行解码。
  • 谢谢迈克尔,我的意思是回显 $iframe_source 变量。谢谢亚历克斯。我对解码感到困惑,因为我无法获得整个 url 来解码它。如果我尝试从 $_GET 中检索它然后解码,例如,$iframe_source = urldecode($_GET['url']),我仍然只有在&符号之前的部分。这有意义还是我错过了什么?

标签: php get urlencode


【解决方案1】:

我认为 rawurlencode() 也会对 & 符号进行编码。

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

【讨论】:

  • 谢谢,斯科特。现在就试试这个。
  • 不走运。事情是 urlecode 正在用 '%26' 替换 & 符号,但一些 get 方法仍然将它们解释为参数分隔符。
  • GET 太聪明了。你总是可以使用 base64_encode():us.php.net/manual/en/function.base64-encode.php
【解决方案2】:

我相信,您如何附加它,$_GET 函数认为与符号表示要获取的新值。我敢打赌,如果你在 $iframe_view = $_GET[$view] 之后这样做,它会输出文章。

如果您希望它获取完整的 URL,我认为最好通过将 & 符号替换为其他内容来进行编码,然后在获取 url 后,将它们替换回 & 符号。

【讨论】:

  • 嗨,理查德,谢谢。 $_GET[$view] 确实如此。问题是,我实际上是为一个未知的 url 动态地做所有这些,所以我不能手动转换 & 符号。我需要一个适用于每个网址的解决方案。
  • 好吧,即使您不知道 URL,通过字符串替换 & 应该可以工作,我很困惑为什么您认为这不起作用?一般来说,get 不起作用的原因是因为 HTTP 请求认为每个 & 都表示一个新的 GET 变量,因此是你的问题。如果您将 & 替换为特定的字符串序列,那么您应该没有问题。 @@!!## 之类的东西可能会奏效,因为它真的有可能在 url 中吗?我会继续看这个我猜想找到一个解决方案。祝你好运!
猜你喜欢
  • 2018-05-07
  • 2011-06-16
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 2018-12-02
  • 2012-09-17
相关资源
最近更新 更多