2011-06-23 17 views
5

tengo algo de contenido (HTML) que está siendo codificada como resultado de este javascript (de this page) y se envía a mi solicitud rieles:ruby ​​/ rails equivalente a javascript decodeURIComponent?

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

código La corresponden js conseguirlo de nuevo a original, es la siguiente:

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

Mi pregunta es, ¿hay un equivalente en ruby ​​de decodeURIComponent()? Hasta ahora tengo esto que lo consigue parte de la salida, pero me falta el último paso del decodeURIComponent:

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

Respuesta

12

URI.unescape probablemente podría ayudar a:

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

hay que añadir la necesaria rubygem también:

require 'uri' 

He probado esto en ruby ​​1.9.2.

+0

Gracias, he actualizado la respuesta :) – olistik

+0

gracias - cuando aplico URI.unescape o URI.decode, aparece un error de "secuencia de bytes no válida en UTF-8". Parece que la salida de CGI :: escape() es US-ASCII. Cuando traté de usar Iconv para convertir la cadena a UTF-8 antes de aplicar URI.unescape, dejó de arrojar el error, pero parecía eliminar solo uno de los pasos de codificación, por lo que la salida seguía siendo un desastre. ¿Algun consejo? O tal vez este es un problema separado. – bobfet1

Cuestiones relacionadas