[英]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
&
tid=3
相反,您需要对内部URL进行URL参数编码。
无需对GET或REQUEST变量进行网址解码,它们会自动解码:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.