【问题标题】:Pass complex URL as parameter in PHP在 PHP 中将复杂的 URL 作为参数传递
【发布时间】:2011-05-05 12:15:38
【问题描述】:

我正在尝试将复杂的 URL 作为 url 参数传递,但如果 url 包含 & 则会出现问题,例如我想将以下链接作为参数传递

http://www.google.ps/search?hl=en&client=firefox-a&hs=42F&rls=org.mozilla%3Aen-US%3Aofficial&q=The+type+%27Microsoft.Practices.ObjectBuilder.Locator%27+is+defined+in+an+assembly+that+is+not+referenced.+You+must+add+a+reference+to+assembly+&aq=f&aqi=&aql=&oq=

我正在尝试从用户那里获取一个 URL 作为参数并将用户重定向到该 URL。

我如何在 PHP 中处理这个问题?


整个故事:

我正在尝试对 Flash 文件进行一些广告分析,以便用户将 Flash 广告提交到包含所需网页链接的网站。

现在,我的客户需要知道这个 flash 文件被点击了多少次。为了解决这个问题,我会直到每个提交 flash 的人都写一个指向我的客户网页的链接,并将所需的 URL 作为参数传递如下

http://myclientwebpage.com/disp.php?link=www.google.com&id=16

通过这种方式,我可以更新我的数据库并计算该链接被点击的次数

【问题讨论】:

  • 你能进一步解释你真正想用它做什么吗?
  • 如果我理解正确,您的示例中的“www.google.com&id=16”是需要编码的链接。所以,不要写echo "href='http://myclientwebpage.com/disp.php?link=" . $link . "'",而是写echo "href='http://myclientwebpage.com/disp.php?link=" . rawurlencode($link) . "'"。然后,在disp.php 代码中,您将拥有$_GET['link'],其中将包含“www.google.com&id=16”(不仅仅是“www.google.com”)。
  • 我认为唯一的问题应该是与符号& 在原始URI 中应该写为%26。所有其他角色都可以按原样介绍。

标签: php url


【解决方案1】:

使用urlencode()rawurlencode()


你写道:

我正在尝试获取一个 URL 作为参数 从用户并将用户重定向到此 网址。

但您没有回答问题 - 您如何获得该 URL?用户如何为您提供它?是用<input type='text'/>写的吗?或者用户是否点击了包含 URL 作为参数之一的链接?还是作为存储在 DB 中的某个 URL 的 ID 传递?

我想到的一个案例 - 以纯文本替换 URL 并在打开真实页面之前将用户发送到某个“重定向页面”,因此最终页面看不到可能包含一些安全数据(例如会话 ID)的 HTTP 引荐来源网址.在这种情况下,你会写

<a href='redirect.php?link=<?php echo rawurlencode($url); ?>'>
    <?php echo htmlspecialchars($url); ?>
</a>

而不是

<a href='redirect.php?link=<?php echo $url; ?>'>
    <?php echo htmlspecialchars($url); ?>
</a>

【讨论】:

  • 问题是我从 $_GET 得到这个 URL
  • 还有什么问题?如果您从$_GET['url'] 获取此 URL,并希望将其放入a 标记的href 属性中,那么它将类似于&lt;a href='?link=&lt;?php echo rawurlencode($_GET['url']); ?&gt;'&gt;next link&lt;/a&gt;,然后在“下一页”中您将通过$_GET['link'] 获取它。
  • @binaryLV 我怀疑这里的问题是 URL 没有被正确编码到 URL 中
  • array 'link' => string 'www.google.ps/search?hl=en' (length=26) 'id' => string '13' (length=2)
  • @Feras Odeh,你到底在用那个 URL 做什么?一步步。你如何得到它以及你需要用它做什么?
【解决方案2】:

据我了解,您需要将&amp;amp; 替换为&amp;amp;

$url = str_replace('&', '&amp;', $url);

&amp;amp; 保留,用于分隔 GET 参数,&amp;amp; 用于在 URL 中写入文字和符号。

【讨论】:

  • Andre Backlund,我建议使用rawurlencode()urlencode()(而不是替换单个字符),因为 URL 可能不仅包含“&”,还包含其他特殊字符(例如, '#' 是我想到的第一个)。
  • 我认为唯一的问题应该是与符号&amp;amp; 在原始URI 中应该写为%26。所有其他角色都可以按原样介绍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多