2011-10-17 33 views
2

我有一個網站,當用戶搜索藝術家,歌曲或專輯並單擊搜索時,會顯示搜索結果。然後將各個搜索項設置爲可點擊的,這意味着每個搜索項都使用自己的路徑(或路徑)來生成鏈接。Rails 3.1:使用句點(。)的UrlEncode問題

我一直遇到的問題是隨機出現的一些藝術家,歌曲或專輯名稱(例如句點(。))中的奇怪字符。無論如何url編碼這些?

這裏是我當前的代碼:

<% artists[0..5].each do |art| %> 
         <li><span><strong><%= link_to "#{art}", artist_path(CGI::escape(art)) %></strong></span></li> 
       <% end %> 

回答

2

假設你有一個名爲"[email protected]^[]/=hi?qqq=123"

encoded = URI.escape str_to_be_encoded 

encoded = URI.escape(str_to_be_encoded, Regexp.new("[^#{URI::PATTERN::UNRESERVED.gsub('.','')}]")) 

專輯名稱中的第一個將編碼爲

"[email protected]%5E[]/=hi?qqq=123" 

第二個將編碼到

"slash%40%5E%5B%5D%2F%3Dhi%3Fqqq%3D123" 

會發生什麼是大多數url編碼方法不會轉義它認爲它是值url的一部分的字符,因此符號像平等和問號不會被轉義。

第二種方法告訴轉義函數也逃避url-legal字符。所以你得到一個更好的編碼字符串。

然後,您可以將其附加到你的網址像

"http://localhost:3000/albums/1-#{encoded}" 

希望這有助於。