传出网址剥离字符

时间:2011-10-27 02:24:38

标签: php redirect

我们使用外发网址将用户引导至外部网站,这是一种不同的艺术风格。

我遇到的问题是twitter feed,我们的重定向会从网址中删除#!/ twitterusername。

我们的php是:

<?
$goto = $_GET['url'];
$referrer = $_SERVER['HTTP_REFERER'];
?>

链接html是:

<div>
<a class="mini green button" href="<?=$goto;?>">Continue to <span style="text-transform:lowercase !important;"><?=$goto;?></span></a>
 </div>

传出的网址应为:

http://twitter.com/#!/twitterusername

然而,goto链接变为:

http://twitter.com/

任何想法,我有一个金发的时刻

3 个答案:

答案 0 :(得分:0)

可能是因为您没有在传入的URL中正确编码#字符。 #之后的所有内容都是本地锚点,不会发送到服务器。因此,如果您有http://your.site.com/controller?url=http://twitter.com/#!/twitterusername,#之后的所有内容都将被解释为本地锚点,而不会发送到您的服务器。您需要对参数进行URL编码。

使用http://php.net/manual/en/function.urlencode.php

答案 1 :(得分:0)

您需要使用urlencode。就是这样。

然后执行类似

的操作
$referrer = $_SERVER['HTTP_REFERER'];

echo 'go.php?url=' . urlencode($referrer);

http://twitter.com/#!/twitterusername将被编码为您需要的http%3A%2F%2Ftwitter.com%2F%23%21%2Ftwitterusername

答案 2 :(得分:0)

当您将goto网址发送到中间网页时需要urlencode,并且在回复之前需要urldecode

在包含原始链接的页面中,您需要使用

<a href="<?=urlencode("http://twitter.com/#!/twitterusername")?>">Twitter</a>

然后在中间的php中,使用

$goto = urldecode($_GET['url']);