2010-07-20 71 views

回答

3

你必須來urlencode您的網址,以逃避特殊/禁止字符。

http://php.net/manual/en/function.urlencode.php

+0

詳細說明,#是網址中的一個特殊字符(指向頁面內的錨點)。要將其用作查詢字符串的一部分,需要對其進行編碼,這將在URL中看起來像%23,但#在$ _GET中。 – grossvogel 2010-07-20 15:26:46

+0

首先,我相信應該使用urlencode的rawurlencode instread,因爲urlencode的空間編碼方式(如'+')幾乎不推薦使用,並且僅用於遺留目的。其次,他不會收到服務器端的URL,他會嗎? '#'符號表示一個片段,並且它後面(包括它)返回給服務器。據我所知,這個答案不會奏效。 – Stephen 2010-07-20 15:28:07

+1

@Stephen:編碼空格as +是'application/x-www-form-urlencoded'內容類型的一部分,當沒有文件輸入時,HTML用於通過查詢字符串和POST函數發送表單數據當下。這種媒體類型仍然是HTML5中表單的默認格式;因此,它不**棄用。 – Powerlord 2010-07-20 15:37:13

1

的#後的部分稱爲片段標識符,並且它不被髮送到服務器。如果你想這樣發送,你需要使用encodeURIComponent

+0

我相信它是正式稱爲「片段標識符」。 「#」字符本身被稱爲哈希(至少在英國)。 – MrWhite 2010-07-20 15:31:46

+0

謝謝,我編輯了我的答案。我把它稱爲散列,因爲你可以通過'window.location.hash'訪問它。 – Maerlyn 2010-07-20 15:42:45

0

您需要確保URL已正確轉義 - 請參閱URL Escape Codes以供參考。例如,#應該轉義爲%23

有很多方法可以做到這一點,包括使用JavaScript函數encodeURIComponent(用於動態生成的鏈接)。

0

嗯,我正在處理一個AngularJS應用程序,它檢查用戶是否登錄了每個請求。

在某些時候,應用程序會將用戶重定向到使用參數「next」傳遞用戶當前狀態的/ login控制器。

所以我已經得到了這個網址「http://test.dev/login/?next=/#/foo/bar」,我想獲得$ _GET ['next']的值,但是等等...爲什麼heck只返回'/'?

那麼,事實證明,我需要使用JavaScript方法encodeURIComponent()來生成URL。

然後這個:http://test.dev/login/?next=/#/foo/bar,成爲這個:http://test.dev%2Flogin%2F%3Fnext%3D%2F%23%2Ffoo%2Fbar和PHP能夠處理這個很好。