2011-08-15 42 views
4

考慮字符串:` (?EXACT紅寶石相當於JavaScript的escape()函數的

JavaScript的escape()編碼這樣的:

escape("` (?") 
"%60%20%28%20%3F" 

如何能夠做到在Ruby中同樣的效果?沒事我嘗試的作品:

[Dev]> CGI.escape("` (?") 
=> "%60+%28+%3F" 
[Dev]> URI.encode("` (?") 
=> "%60%20(%20?" 
[Dev]> Addressable::URI.encode("` (?") 
=> "%60%20(%20?" 

回答

5

ERB::Util.url_encode將做到這一點:

>> require 'erb' 
=> true 
>> ERB::Util.url_encode("` (?") 
=> "%60%20%28%20%3F" 
+0

不是javascript轉義的精確副本 - 對待冒號不同 –

4

URI::encode也需要一個正則表達式匹配需要被轉義不安全的字符;你可以只通過一個正則表達式匹配任何字符:

URI.encode("` (?", /./) # => "%60%20%28%20%3F" 

順便說一句,從Mozilla Developer Network

的逃生和UNESCAPE功能不用於非ASCII字符正常工作,並已被棄用。在JavaScript 1.5和更高版本中,使用encodeURI,decodeURI,encodeURIComponent和decodeURIComponent。

+0

argh,但'encodeURIComponent()'不編碼'('或')'!爲什麼'escape()'更可取? –

+0

據Mozilla稱,其中一個原因是它正確處理非ASCII字符。但爲什麼這對你很重要?任何體面*解碼*函數將能夠處理任何這些結果。 – jtbandes

+0

因爲在URL中有parens會打破所有類型的東西(自動鏈接邏輯,Markdown邏輯等) –