2013-05-16 41 views
3

直到現在我只是在閱讀,但現在我有我的第一個問題,希望有人可以幫助我。php位置重定向和特殊字符

您可以通過執行搜索提交:

input: Lösung? Tösung& -> url: http://127.0.0.1/?search=Lösung%3F+Tösung%26 

如果您還沒有登錄,然後我重定向(Location頭)與url_encode搜索登錄:

...login/return_url=http%3A%2F%2F127.0.0.1%2F%3Fsearch%3DLösung%3F+Tösung%26amp%3B 

我得到「錯誤'$ _GET ['return_url']的結果:

http://127.0.0.1/?search=Lösung? Tösung& 

登錄後和重定向後(不編碼url)我得到:

url: http://127.0.0.1/?search=Lösung? Tösung& -> input: Lösung? Tösung 

也許我應該重定向與URL編碼之前?但是,我得到一個錯誤(URL不是可讀?)

header("Location: ".urlencode(url).""); 

我怎樣才能做到這一點重定向我仍然得到同樣的結果就像在第一url和例子不失特殊字符,後?

也許這很簡單,但直到現在我沒有得到正確的結果,並希望你能幫助。

+0

可能的一種方式是提取部分搜索=只有編碼Lösung ? Tösung&,但我該怎麼做。 –

回答

1

我看到的是錯誤的URL中給出的第一件事情。 的$ _GET []格式的URL應該是

http:// domain.com/index.php?myvar=var&myfoo=foo 

對於後您的網頁時使用第一變種「?」 對於每一個變種之後你他們夫婦與「&」

進行urlencode和urldecode與字符解決您的問題。

$url= "http://www.mysite.com/index.php?search=location&option=europe"; 

$encoded = urlencode($url); 
// result: http%3A%2F%2Fwww.mysite.com%2Findex.php%3Fsearch%3Dlocation%26option%3Deurope 

$decoded = urldecode($encoded); 
// result: http://www.mysite.com/index.php?search=location&option=europe 

有了您的網址:

$url= "http://127.0.0.1/?search=Lösung%3F+Tösung%26"; 

編碼:

http%3A%2F%2F127.0.0.1%2F%3Fsearch%3DL%C3%B6sung%253F%2BT%C3%B6sung%2526 

解碼:

http://127.0.0.1/?search=Lösung%3F+Tösung%26 
+0

我看不出有什麼區別。我在searchsite上執行urlencode,然後在登錄時解碼,重定向頭('location'encodedurl)仍然出錯。 –

+0

ö在一個網址是不好的。所以你將不得不編碼Ö並保持?和&就是。最終結果應該是:http://127.0.0.1/?search=L%F6sung?+T%F6sung&。用它作爲原始字符串。 Urlencode /解碼與它一起工作。重定向應該使用Ö作爲%F6的原始字符串。 –

3

我想你需要rawurlencode()

+0

hm在哪一點我應該使用它,也許你可以更具體一點? –

+0

它根據RFC 3986對給定的字符串進行編碼,所以我認爲不僅像'?','=','#','['和']'這樣的字符將被編碼,而且所有不是a-zA- Z0-9_。 –

+0

好吧,但這不起作用。同樣的結果,缺少charachters,重定向rawurlencoded url也是一個錯誤。 –