繁体   English   中英

urlencode和GET请求在“与”号中断

[英]urlencode and GET request breaks at Ampersand

我正在一个有数千个页面的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 refresh标签:

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

“ />

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

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

我怎样才能解决这个问题?

您应该在用户链接打印之前使用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=开头,那么您可以将其替换为数据库中的任何内容,并将此部分添加到您的meta标记中,并从db回显urlencoded链接。

任何其他解决方案都将成为难题。 其中之一是从go.php中的其余GET参数重新创建原始网址:

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

您滥用网址。

您的URL解析如下:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM