无法获取查询字符串中传递的URL的完整值

时间:2014-09-22 11:02:55

标签: php html url

我想将URL发送到另一个页面,如下所示:

http://localhost/l.php?u=http://www.simplesite.com?view=photo&id=13

网址http://www.simplesite.com?view=photo&id=13是参数u的值。

l.php文件中,我的结果如下:

echo $_GET['u']; // http://www.simplesite.com?view=photo
                 // &id=13 is missing

这有什么问题?我想重定向到网址http://www.simplesite.com?view=photo&id=13,但缺少&id=13部分。

我创建了与preg_replace的链接。我无法将PHP函数应用于$1变量

preg_replace("/(https?:\/\/[\w-?#&;~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" 
href=\"l.php?u=$1\">$1</a>",$text);

2 个答案:

答案 0 :(得分:1)

因为您的网址中有&符号。使用它时,您可以定义新的URL参数。在发送之前使用urlencode,在需要URL时使用urldecode。

例如:urlencode('http://localhost/l.php?u=http://www.simplesite.com?view=photo&id=13');

输出:http%3A%2F%2Flocalhost%2Fl.php%3Fu%3Dhttp%3A%2F%2Fwww.simplesite.com%3Fview%3Dphoto%26id%3D13

再次解码:

urldecode('http%3A%2F%2Flocalhost%2Fl.php%3Fu%3Dhttp%3A%2F%2Fwww.simplesite.com%3Fview%3Dphoto%26id%3D13');

输出:http://localhost/l.php?u=http://www.simplesite.com?view=photo&id=13

答案 1 :(得分:0)

试试这段代码:

preg_replace_callback("/(https?:\/\/[\w-?#&;~=\.\/\@]+[\w\/])/i", function($m){
    return "<a target='_blank' href='l.php?u=".urlencode($m[0])."'>".$m[0]."</a>";
}, $text);

这将替换所有带有锚标签和链接的链接。也将对URL进行编码。