0

我正在为我的网站构建一个“离开”页面,当用户发布指向另一个网站的链接时,每个点击该链接的访问者将首先被重定向到 away.php 文件,其中包含我不对内容负责的信息的链接网站。

away.php 中用于获取传入浏览器 URI 的代码是:

$goto = $_GET['to'];

到目前为止,它可以工作,但是动态 URI 存在一个逻辑问题,例如:

www.mydomain.com/away.php?to=http://example.com

正在工作,但动态 URI 像

www.mydomain.com/away.php?to=http://www.youtube.com/watch?feature=fvwp&v=j1p0_R8ZLB0

由于链接域中包含 & ,因此无法正常工作,这将导致 $_GET['to'] 字符串提前结束。

$goto 变量仅包含第一个 & 之前的部分:

echo $_GET['to'];

===> " http://www.youtube.com/watch?feature=fvwp "

我明白为什么,但是因为我还没有在互联网上找到它,所以正在寻找解决方案。

4

1 回答 1

2

尝试使用urlencode

$link = urlencode("http://www.youtube.com/watch?feature=fvwp&v=j1p0_R8ZLB0") ;
echo $link;

该函数会将url特殊符号转换为可以携带数据的适当符号。

它看起来像这样,并且可以附加到 get 参数:

http%3A%2F%2Fwww.youtube.com%2Fwatch%3Ffeature%3Dfvwp%26v%3Dj1p0_R8ZLB0

要获取特殊字符(例如输出链接),有一个函数urldecode.

功能htmlentities也可能有用。

你可以用这个测试:

$link = urlencode("http://www.youtube.com/watch?feature=fvwp&v=j1p0_R8ZLB0") ;
$redirect = "{$_SERVER['PHP_SELF']}?to={$link}" ;

if (!isset($_GET['to'])){
    header("Location: $redirect") ;
} else {
    echo $_GET['to'];
}

编辑: 好的,我已经为您的特定情况找到了解决方案。

此解决方案仅在以下情况下有效: 参数to将位于查询字符串的最后。

if (preg_match("/to=(.+)/", $redirect, $parts)){ //We got a parameter TO
    echo $parts[1]; //Get everything after TO
}

所以,$parts[1]将是你的链接。

于 2013-06-19T21:26:05.020 回答