在Ampersand的urlencode和GET请求中断

时间:2013-05-12 13:31:54

标签: php wordpress get urlencode

我正在使用wordpress网站,该网站有数千页,所有者通过名为“afflink”的自定义字段为每个页面输入了会员链接

会员链接在页面上输出:

<?php echo get_post_meta(get_the_ID(), 'afflink', true) ?>

用户单击将其发送到名为go.php

的页面的链接

链接如下所示:

www.mysite.com/go/go.php?url=http://www.somesite.com/redirector.aspx?aid=334&cid=2502&tid=3

在go.php页面中有以下元刷新标记:

<meta http-equiv="refresh" content="5;<?php echo $_GET['url']?>

“/&gt;

但是,当页面刷新时,它会将我们发送到:

http://www.somesite.com/redirector.aspx?aid=334

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

在打印链接给用户之前,您应该使用urlencode,而不是在他点击链接后

$link = "http://www.somesite.com/redirector.aspx?aid=334&cid=2502&tid=3";
echo '<a href="http://www.mysite.com/go/go.php?url='.urlencode($link).'">' . $link . '</a>';

[+]

我强烈建议编写一些脚本,用适当的脚本更改现有的条目。如果所有这些都以www.mysite.com/go/go.php?url=开头,那么您可以将其替换为数据库中的任何内容,将此部分添加到元标记并从db回显urlencoded链接。

任何其他解决方案都只是一个问题。其中一个是从go.php中的其余GET参数重新创建原始URL:

$url = $_GET['url'];
unset($_GET['url']);
if ($_GET) {
    $url .= '&' . http_build_query($_GET);
}

答案 1 :(得分:0)

您滥用网址。

您的网址解析如下:

  • 路径:go/go.php
  • ?
  • 第一个查询字符串参数:url=http://www.somesite.com/redirector.aspx?aid=334
  • &
  • 第二个查询字符串参数:cid=2502
  • &
  • 第三个查询字符串参数:tid=3

相反,您需要对内部URL进行URL参数编码。

答案 2 :(得分:0)

无需对GET或REQUEST变量进行urldecode,它们会自动解码:

http://php.net/manual/en/function.urldecode.php