2011-04-15 60 views
2

我通過URL傳遞數據,然後使用PHP的$ _GET []函數訪問它。如果URL中有一個'#',那麼GET請求似乎會截斷字符串。例如,

http://example.com/yyy.php?version=0.88&value=ART:C_Sharp_%28programming_language%[email protected][email protected] d,F#,Java 5中,Nemerle,瓦拉平臺 共同語言基礎設施許可證 CLR專有常用的文件擴展名 的.cs網站升C編程在 維基C#(發音爲/對ʃɑrp/ 看到尖銳)是一種多範式 編程語言涵蓋 勢在必行,聲明性,功能性, 通用的,面向對象的 (類系),和麪向組件 編程學科。@ 10902

$_GET['value']回報:

ART:C_Sharp_(programming_language)@多paradigm_programming_language @影響下d,F

是否有辦法避免這種情況?我是否應該將發佈到網址的值中的所有#去掉?

使用XMLHttpRequest()從客戶端JavaScript代碼訪問URL位置。從JavaScript功能encodeURIComponent方法編碼的字符串()是,

ART%3AC_Sharp_%2528programming_language%2529%40Multi-paradigm_programming_language%40Influenced%20D%2C%20F%23%2C%20Java%205%2C%20Nemerle%2C %20Vala%20Platform%20Common%20Language%20Infrastructure%20License%20CLR%20Proprietary%20Usual%20file%20extensions%20.cs%20Website%20C%20Sharp%20Programming%20AT%20Wikibooks%20C%23%20(發音%20%2F %CB%88si%CB%90%20%CB%88%CA%83%C9%91rp%2F%20see%20sharp)%圖20是%20A%20multi範%20programming%20language%20encompassing%20imperative%2C%20declarative% 2C%20功能%2C%20基準%2C%20對象導向%20(基於類別)%2C%20和%20組件導向%20編程%20學科%8681

解碼輸出由 'yyy.php' 記錄:

ART:C_Sharp_%28programming_language%29 @影響多paradigm_programming_language @ d,F#,Java 5中,Nemerle,瓦拉平臺 共同語言基礎設施許可證 CLR專有通常的文件擴展名 的.cs c網站夏普在 維基C#編程(發音/ËsiË ËʃÉ'rp/看到尖銳)是 多範式編程語言 包圍勢在必行,聲明, 功能,通用的,面向對象的 (基於類)和麪向組件的 編程學科。@ 8681

不使用encodeURIComponent方法()和應該是什麼預期的結果記錄的輸出:

ART:C_Sharp_(programming_language)@影響多paradigm_programming_language @ d,F#,Java 5中,Nemerle ,瓦拉平臺 共同語言基礎設施許可證 CLR專有常用的文件擴展名 的.cs c網站夏普在 維基C#(發音爲/對ʃɑrp/ 看到鋒利)是一個多範式 編程啦編程nguage包圍 勢在必行,聲明性,功能性, 通用的,面向對象的 (類系),和麪向組件 編程學科。@ 8681

+0

檢查更新後的答案。 – 2011-04-15 05:23:10

+0

你可以把網址放在那裏,你的網址有'_%'? – 2011-04-15 06:02:41

+0

@experimentX:好的我編輯了.....現在我該如何完全恢復編碼/變形字符? – VJune 2011-04-15 06:34:34

回答

5

一個URL串A #是一個片段標識符。在將該字符串添加到URL之前,您需要使用urlencode()

由於PHP無法訪問URL碎片,因此您無法在您的yyy.php腳本中對此進行任何操作。

編號:http://en.wikipedia.org/wiki/Fragment_identifier

+1

啊對不起,我忘了提及.....這些值是使用XMLHttpRequest()從客戶端JavaScript發送的。 JavaScript中的任何類似的函數來處理這個問題? – VJune 2011-04-15 05:17:08

1

你需要轉義字符,因爲它通常使用瀏覽器作爲hashtag滾動到特定元素。

在PHP中,您在查詢字符串中使用urlencode()函數。

1

#之後的URL部分是片段,永遠不會發送到服務器。它僅由用戶代理處理。您需要使用JavaScript與之交互。

雖然在您的示例中,您需要將其轉義,以便從字面上理解其含義。正如其他人指出的那樣,urlencode()非常適合這一點。

2

嘗試傳遞參數編碼urlencode()

header('Location: http://your_url?version=0.88&value='.urlencode('ART:C_Sharp_%28programming_language%[email protected][email protected] D, F#, Java 5, Nemerle, Vala Platform Common Language Infrastructure License CLR Proprietary Usual file extensions .cs Website C Sharp Programming at Wikibooks C# (pronounced /ˈsiː ˈʃɑrp/ see sharp) is a multi-paradigm programming language encompassing imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming [email protected]')); 

在JS你有

window.location = 'index.php?value='+encodeURIComponent('ART:C_Sharp_%28programming_language%[email protected][email protected] D, F#, Java 5, Nemerle, Vala Platform Common Language Infrastructure License CLR Proprietary Usual file extensions .cs Website C Sharp Programming at Wikibooks C# (pronounced /ˈsiː ˈʃɑrp/ see sharp) is a multi-paradigm programming language encompassing imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming [email protected]'); 

UPDATE

window.location = 'index.php?version=0.88&value='+encodeURIComponent('ART:C_Sharp_(programming_language)@[email protected] D, F#, Java 5, Nemerle, Vala Platform Common Language Infrastructure License CLR Proprietary Usual file extensions .cs Website C Sharp Programming at Wikibooks C# (pronounced /ˈsiː ˈʃɑrp/ see sharp) is a multi-paradigm programming language encompassing imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming [email protected]'); 

enter image description here

+0

只是在這裏挑剔,但一個位置標題值應該是一個完整的URI,包括方案(HTTP,HTTPS等),主機和路徑 – Phil 2011-04-15 04:57:41

+0

對不起,我忘了提及.....這些值從客戶端發送JavaScript使用XMLHttpRequest的()。 JavaScript中的任何類似的函數來處理這個問題? – VJune 2011-04-15 05:17:46

+0

@ user518245有一個js函數uriencode – 2011-04-15 05:18:42

0

沒有ü嘗試parse_urlPHP_URL_FRAGMENT

echo parse_url($url, PHP_URL_FRAGMENT); 
+0

你可以在上述功能的幫助下操縱你的網址 – diEcho 2011-04-15 07:13:27