2009-07-21 67 views
8

我想找到一種方法來保存網址的哈希部分和PHP變量。這個想法有點怪,但忍耐着我...PHP&Hash/Fragment部分的URL

我想從下面的URL中提取「位置」片段並將其保存爲PHP變量。

http://www.example.com/#location 

但是,link的討論表明URL的片段只能通過JavaScript訪問。

但是有可能創建一個鏈接,其中的片段在URL中被複制,被PHP解析,然後被mod重寫刪除?所以....

原始地址:

http://www.example.com/location/#location 

PHP獲得位置變量多虧了簡單的 「位置」,在URL

阿帕奇然後重寫鏈接:

http://www.example.com/#location 

我很想知道是否有優雅的方式來解決這個問題。

+2

你可以改變片段爲$ _GET價值? – 2009-07-21 22:08:59

+0

不,你不能。看到我的答案 – 2009-07-21 22:15:16

+0

這是一個使用JavaScript和隱藏的輸入字段的解決方案http://stackoverflow.com/questions/940905/can-i-read-the-hash-portion-of-the-url-on-my-server -side-application-php-ruby/43119226#43119226 – 2017-03-30 13:27:40

回答

0

你可以通過AJAX發送哈希代碼到PHP腳本,做一個即時刷新(頁面重新加載)

5

,這個片段從未發送到服務器,根據該thread上mod_rewrite的論壇。所以,這可能是不可能的,除非你在事後使用AJAX來改變頁面。

另一個想法是讓Javascript將哈希變成$ _GET參數,然後刷新頁面。

9

您需要使用Javascript才能閱讀。有幾個不同的選項 - 在頁面加載時,您可以使用XmlHTTPRequest(AJAX請求)告訴服務器附加URL參數。 Alternatley,你可以檢查是否有其他參數(也是通過Javascript),如果你找到了,可以回到一個不同的URL中,這些參數被編碼到URL本身中。

0

通過AJAX將值發送到服務器後。您可以在SESSION中設置片段值。刷新頁面時,您可以獲取在會話和過程中設置的片段,然後顯示相應的內容。因爲我們無法通過PHP_SELF/QUERY_STRING等獲取片段值。我們需要這樣做來提高Gmail等網頁的速度。

-2

它包含在從PHP's parse_url function返回的「片段」值中。

從PHP手冊:

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 

print_r(parse_url($url)); 

echo parse_url($url, PHP_URL_PATH); 
?> 

返回結果:

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 
/path