Php 与&;以字符串形式提交$\u GET

Php 与&;以字符串形式提交$\u GET,php,string,url,get,Php,String,Url,Get,我正在为我的网站创建一个“远离”页面,当用户发布到另一个网站的链接时,每个点击该链接的访问者都会首先被重定向到away.php文件,其中包含一个我不负责链接网站内容的信息 php中获取传入浏览器URI的代码是: $goto = $_GET['to']; 到目前为止,它还可以工作,但是动态URI存在一个逻辑问题,例如: www.mydomain.com/away.php?to=http://example.com 正在工作,但动态URI类似于 www.mydomain.com/away.php

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

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
由于链接域中包含一个(&C),这将导致$u GET['to']字符串提前结束,因此无法工作

$goto变量只包含第一个&:

echo $_GET['to'];
==>“”


我知道原因,但正在寻找解决方案,因为我还没有在internet上找到它。

尝试使用
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

此外,该功能也可能有用

您可以使用以下方法进行测试:

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

它正在被编码,但是
$\u GET['to']
字符串在&.之前仍然被剪切。不过,感谢您的示例,如果我错了,请纠正我,但只有在您已经知道在$link变量中设置它的URI的情况下,您才能这样做。在我的例子中,我还不知道URI,它总是不同的,我试图通过
$\u get['to']
获取发布的URI。如果不进行编码,这是不可能的。你能给我举个例子吗?我有一个URI:
www.mydomain.com/away.php=http://www.youtube.com/watch?feature=fvwp&v=j1p0_R8ZLB0
和通过
$\u GET['to']
我需要
to=
之后的完整字符串,包括&-parts。好吧,这真的很奇怪,但我得到了它。让我想想。