2012-02-27 88 views
4
逃生(window.location.href)的

我已經嘗試了這麼多的組合讓我的頁面的正確路徑類似的JavaScript代碼等效在PHP

escape(window.location.href) 

我已經試過這樣:

$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]$_SERVER[QUERY_STRING]"; 

但它返回是這樣的:當實際頁面

http://www.mydomain.com/node/4158?asdf=1asdf=1 

http://www.mydomain.com/node/4158?asdf=1 

,如果我有這樣的URL:http://www.mydomain.com/node/4158#comments例如其結果是:

http://www.mydomain.com/node/4158 

即沒有 「#comments」

+4

'#'部分不會傳輸到服務器。這是瀏覽器用來跳轉到特定錨點的「哈希碎片」。 – 2012-02-27 09:49:23

+0

不要使用'escape',它已被破壞並被棄用。使用'encodeURIComponent'。 – Quentin 2012-02-27 09:49:46

+0

即使我使用encodeURIComponent,我仍然將#comments作爲已保存url的一部分。 – jaypabs 2012-02-27 10:04:33

回答

3

片段標識符#是完全處理客戶端。瀏覽器不會將它發送到服務器,所以PHP無法訪問它。

找到它的唯一方法是在發出HTTP請求的頁面中包含JavaScript,其中包括完整的URI。

+0

這對我來說是一個大問題,因爲在我使用此代碼之後「escape(window .location.href)「它將值保存到表格中,我使用php來區分當前頁面上的url和表格上的保存網址。如果這不能在PHP中完成,有沒有一種方法可以保存只使用JavaScript W/O #comments或?asdf = 1的URL? – jaypabs 2012-02-27 09:58:08

0

嘗試

$url = $_SERVER['REQUEST_URI']; 
+0

這不會給'#'片段 – 2012-02-27 09:49:37

+0

,因爲我已經在我的問題中解釋過它不包含?asdf = 1或#comments – jaypabs 2012-02-27 09:58:52

0

$_SERVER['QUERY_STRING']$_SERVER['REQUEST_URI']的子串 - 你只需要後者。但是不要自己構建URL,只需使用$_SERVER['SCRIPT_URI']即可。另外,由於您的應用程序是服務器端,並且片段標識符(從#開始的所有內容)都不會包含在HTTP請求中,所以無法在php代碼中訪問它。

0
$location = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; 
if ($_SERVER["SERVER_PORT"] != "80") { 
    $location .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; 
} else { 
    $location .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
} 
echo $location; 
0

的人說,這個片段客戶端在這裏很多,但根據文檔parse_url將返回片段如果存在(見鏈接的第一個例子)。

+0

只要在這個上搜索幫助,並注意到這沒有幫助,因爲'parse_url'必須首先有一個字符串來抓取url。那麼,這個字符串從哪裏來?不是來自'parse_url'!所以,當你有一個帶'#'的字符串時,它確實有效。但是你需要首先獲取字符串和AFAIK,但是你不能在PHP中使用#作爲字符串來獲取整個URL,儘管這樣做會很好! – 2013-02-15 23:22:01