搜尋

首頁  >  問答  >  主體

可以將標題重寫為:在伺服器端應用程式(如PHP、Ruby、Python等)中,是否可以讀取URL的雜湊部分?

<p>假設網址為:</p> <pre class="brush:php;toolbar:false;">www.example.com/?val=1#part2</pre> <p>PHP可以使用GET陣列讀取請求變數<code>val1</code>。 </p> <p>雜湊值<code>part2</code>是否也可讀取?還是只能由瀏覽器和JavaScript處理? </p>
P粉145543872P粉145543872451 天前450

全部回覆(2)我來回復

  • P粉724256860

    P粉7242568602023-08-21 15:01:41

    簡單測試,訪問 http://localhost:8000/hello?foo=bar#this-is-not-sent-to-server

    python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
    Serving HTTP on 0.0.0.0 port 8000 ...
    localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
    localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -

    伺服器接收到的請求不包含 # 符號後面的內容 - # 符號後面的內容只是客戶端上的錨點查找。

    你可以使用javascript在URL中找到使用的錨點名稱,例如:

    <script>alert(window.location.hash);</script>

    如果你已經有了包含片段的URL字串,PHP中的parse_url()函數可以使用(http://codepad.org/BDqjtXix):

    <?
    echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
    ?>
    
    输出:fizzbuzz

    但是我認為PHP不會接收片段訊息,因為它只存在於客戶端。

    回覆
    0
  • P粉360266095

    P粉3602660952023-08-21 14:50:26

    主要問題是瀏覽器甚至不會發送帶有片段部分的請求。片段部分在瀏覽器中直接解析。因此,它可以透過JavaScript存取。

    無論如何,您可以使用parse_url()將URL解析為各個部分,包括片段部分,但顯然這不是您的情況。

    回覆
    0
  • 取消回覆