我想将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);
答案 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进行编码。