2011-01-22 71 views
4
地址欄上的完整URL

可能重複:
Get entire URL, including query string and anchor如何獲得使用PHP

我有我的網址一樣www.domain.com/#!/username(就像在twitter中一樣)。

如何在'#!'之後檢索包含子字符串的完整URL(上面的整個字符串)在使用PHP或Javascript的地址?

+3

參見http://stackoverflow.com/questions/967649/get-entire -url-including-query-string-and-anchor – 2011-01-22 13:59:30

+2

and http://stackoverflow.com/questions/940905/can-php-read-the-hash-portion-of-the-url/940918 – 2011-01-22 14:00:13

回答

4

在JavaScript中,除非您還有其他事情發生,否則您應該可以從document.location(例如var URLstring = document.location;)獲得完整的URL。

在PHP中,正如其他人已經注意到的,由於哈希的工作方式(它在頁面內導航,並且不觸發頁面重新加載,所以服務器永遠不知道它,除非JS調用在服務器上觸發腳本的Ajax函數)。

+1

我覺得我'你需要繞過使用document.location.href。謝謝 – ptamzz 2011-01-22 14:12:00

1

散列(#)後面的部分永遠不會發送到服務器,因此您永遠不會收到「完整」url。 #之後的部分僅用於客戶端,只能從服務器發送到客戶端。

0

雪橇的答案是最好的,但是,在英鎊符號「#」之後沒有辦法獲得文本。 「#」之後的任何內容都被視爲錨點,不會發送到服務器。 「#」僅由瀏覽器解釋。您可以在這裏嘗試一些Javascript技巧,但我建議避免在「#」之後傳遞數據。

1

URL的哈希部分(#及其後的所有內容)不會被瀏覽器發送到服務器,因此它不適用於PHP。

如果您絕對需要您的服務器端注意它,唯一的方法是加載一個包含讀取哈希值的Javascript的中間頁面,並在值包含在常規HTTP參數中時發出另一個請求。例如。中間頁可能是這樣的:

<html> 
    <!-- snip.. --> 
    <body> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $.get('realContent.php?hash=' + location.hash, 
        function(data) { 
         $('#content').html(data); 
        } 
       ); 
      } 
     </script> 
     <div id="content"></div> 
    </body> 
</html> 
0

我用這個功能對於這個(PHP 5.2)::

function getInstance($uri = 'SERVER') 
    { 

     if ($uri == 'SERVER') 
     { 
      if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) { 
       $https = 's://'; 
      } else { 
       $https = '://'; 
      } 

      if (!empty ($_SERVER['PHP_SELF']) && !empty ($_SERVER['REQUEST_URI'])) { 
       $theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 

       if (strlen($_SERVER['QUERY_STRING']) && strpos($_SERVER['REQUEST_URI'], $_SERVER['QUERY_STRING']) === false) { 
        $theURI .= '?'.$_SERVER['QUERY_STRING']; 
       } 
      } 
      else 
      { 
       $theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']; 
       if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { 
        $theURI .= '?' . $_SERVER['QUERY_STRING']; 
       } 
      } 

      $theURI = urldecode($theURI); 
      $theURI = str_replace('"', '&quot;',$theURI); 
      $theURI = str_replace('<', '&lt;',$theURI); 
      $theURI = str_replace('>', '&gt;',$theURI); 
      $theURI = preg_replace('/eval\((.*)\)/', '', $theURI); 
      $theURI = preg_replace('/[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']/', '""', $theURI); 

    } 
    echo (string)$theURI; 
}