2011-06-23 106 views
5

我有一些內容(HTML)正被編碼爲這個JavaScript(由this page)的結果,發到我的Rails應用程序:ruby​​/rails相當於javascript decodeURIComponent?

function encode_utf8_b64(string) { 
return window.btoa(unescape(encodeURIComponent(string))); 
} 

的對應的js代碼,讓它回到原來是這樣的:

function decode_utf8_b64(string) { 
return decodeURIComponent(escape(window.atob(string))); 
} 

我的問題是,是否有相當於ruby的decodeURIComponent()?到目前爲止,我有這一點,得到它的出路的一部分,但我錯過decodeURIComponent的最後一步:

CGI::escape(Base64.decode64(string)) 

回答

12

URI.unescape或許可以幫助:

def decode_utf8_b64(string) 
    URI.unescape(CGI::escape(Base64.decode64(string))) 
end 

你必須添加必要的rubygem太:

require 'uri' 

我已經測試了這個紅寶石1.9.2。

+0

thx,我已經更新了答案:) – olistik

+0

謝謝 - 當我應用URI.unescape或URI.decode時,我得到一個「UTF-8中無效的字節序列」錯誤。看起來CGI :: escape()的輸出是US-ASCII。當我嘗試使用Iconv在應用URI.unescape之前將字符串轉換爲UTF-8時,它停止拋出錯誤,但似乎只是刪除了一個解碼步驟,因此輸出仍然很亂。有小費嗎?或者,也許這是一個單獨的問題。 – bobfet1