2012-09-27 66 views
8

我有一個鏈接看起來像這樣(這是一個有點難看,因爲它是URL)帶方括號的編碼網址。在Chrome /火狐/ IE不同的行爲

<a href="/items?fc%5B%5D=12345&amp;fc%5B%5D=56789&amp;utf8=%E2%9C%93">foo</a> 

是有點清楚,這是URL編碼並轉化爲

<a href="/items?fc[]=12345&fc[]=56789&utf8=✓">foo</a> 

當表單提交,目標URL看起來在不同的瀏覽器不同:

在Firefox中,它看起來像期望:

http://mydomain/items?fc[]=12345&fc[]=56789&utf8=✓ 

在Chrome中,方括號中顯示URL編碼,(當使用其中不乏這給很醜陋和不專業的地址)。

http://mydomain/items?fc%5B%5D=12345&fc%5B%5D=56789&utf8=✓ 

在IE9(及以上)一切都顯示URL編碼:

http://mydomain/items?fc%5B%5D=12345&fc%5B%5D=56789&utf8=%E2%9C%93 

我可以用 「UTF8 = ...」 的部分生活,因爲這只是一個問題,在IE瀏覽器。 但是,當方括號顯式輸入到URL中時,瀏覽器都沒有任何問題,所以我不明白爲什麼Chrome和IE,而不是Firefox必須使用URL編碼顯示括號。

由於表單的HTML代碼在所有瀏覽器一樣,我想這是與瀏覽器做的,而不是與網站(一個Ruby on Rails的網站在這種情況下)

編輯: 所以要澄清我的實際問題: 爲什麼這是不同的? 有沒有辦法讓它至少在Chrome中看起來不錯? 它可以通過在href =「...」中的URL轉義來修復,但我認爲這是針對URL編碼規則的?

+0

那麼你的問題是什麼?它的醜陋? –

+0

是:) 我已經澄清了一些問題! – foolo

+0

你認爲發佈結果? –

回答

1

當你想分享這些鏈接(有狀態用),我相信你會期待你的鏈接會被共享,從網頁鏈接,複製,電子郵件等

這可能是因爲即使瀏覽器之外(比如說,你的鏈接被複制到其他頁面,電子郵件等等),就會發生一些編碼。如果您必須使用這些字符,您可能不得不接受醜陋的地方。

-1

請糾正我,如果我錯了,但是我好像一個方式已經解決此問題的工作是通過捕獲提交的表單值,並轉化它們與PHP獲取。因此,例如,你可以使用一個表格POST方法,像這樣:

<form action="" method="post"> 
<input type="text" name="fc[]" /> 
<input type="submit" value="Submit" /> 
</form> 

提交後然後搭上形式的價值觀,建立與PHP一個GET查詢,將用戶重定向:

<?php 
if($_POST['fc']) 
    header('Location: ?'.urldecode(http_build_query($_POST))); 
?> 

這是針對特定情況(當然也可能略微超出OP問題的範圍),但對我而言似乎運作良好。

相關問題