我正在为我的网站建立一个“离开”页面,当用户发布到另一个网站的链接时,点击该链接的每个访问者将首先被重定向到away.php文件,其中包含我不负责的信息链接网站的内容。
用于获取传入浏览器URI的away.php中的代码是:
$goto = $_GET['to'];
到目前为止,它有效,但是动态URI存在逻辑问题,例如:
www.mydomain.com/away.php?to=http://example.com
正在运行,但是像
这样的动态URIwww.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”
我理解为什么,但是因为我还没有在互联网上找到它,所以寻找解决方案。
答案 0 :(得分: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]
将是您的链接。