2014-09-22 73 views
1

我想一個URL發送到另一個頁面像這樣通過一個URL的全部價值:無法獲取查詢字符串

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

凡URL 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

爲什麼使用preg_replace?請給我理由。 – 2014-09-22 11:20:25

+0

查找從數據庫中檢索文本的文本中包含的所有鏈接。它可以有很多鏈接。 – Marcus 2014-09-22 11:29:11

回答

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進行編碼。

+0

嘗試此操作併發布您的反饋。 – 2014-09-22 18:22:01

+0

謝謝,它的工作原理。 preg_replace_callback如何工作? – Marcus 2014-09-25 15:38:44

+0

執行正則表達式搜索並使用回調替換 http://php.net/manual/en/function.preg-replace-callback.php – 2014-09-25 15:51:29

1

因爲在URL中有一個&符號。當你使用它時,你可以定義一個新的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

+0

你應該編輯你的答案,因爲這不是用戶要求的。 – 2014-09-22 13:45:58

+2

@ApulGupta Infact,這是用戶想要的。他的URL由於&符而被破壞。這就是爲什麼他必須使用'urlencode'和'urldecode' – GuyT 2014-09-22 13:50:08

+0

我不同意downvote,完全清晰和良好的答案,這爲OP面臨的問題提供瞭解決方案。 – giorgio 2014-09-22 14:10:56