问题与&在使用$ _GET提交的字符串中

时间:2013-06-19 21:23:26

标签: php string url get

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

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

$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

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

1 个答案:

答案 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]将是您的链接。