2012-05-09 5 views
7

Este es el problema: la biblioteca de URI de Ruby no se ocupa de diéresis; es decirCómo usar las diéresis con la biblioteca de URI de ruby ​​

irb> require "uri" 
irb* URI("http://abc.de/äöü") 
URI::InvalidURIError: bad URI(is not URI?): http://abc.de/äöü 

¿Cómo puedo lidiar con eso? Esto es Ruby 1.9.2, por cierto.

+0

Esto ocurre con otros caracteres Unicode, no solo aquellos con diéresis. –

+2

La biblioteca tiene razón, estos caracteres son ilegales en uris. Deberías escapar de ellos. –

+1

Los navegadores pueden manejar diéresis en URLs muy bien; ¿cómo hago lo que hace el navegador? – radiospiel

Respuesta

13

llamada URI.encode antes de análisis:

require 'uri' 
uri = URI(URI.encode("http://abc.de/äöü")) 

Como nota al margen, tenga en cuenta que si la URL contiene un fragmento de hash (#something), que tendrá que dividir manualmente:

require 'uri' 
uri = URI(URI.encode('http://example.com/page.html') + '#' + URI.encode('anchor')) 
+0

¡Esto es asombroso! No quería utilizar Direccionable y aquí está, una solución válida con URI. – ujifgc

4

La gema Addressable es lo que desea utilizar para hacer frente a los IRI.

+0

Impresionante, funciona como un encanto. – radiospiel

+0

Entonces, probablemente debería aceptar la respuesta para que otros puedan saber y para que Sean pueda obtener algunos nuevos puntos de reputación. :) – vlasits

+0

Lo siento, pensé que al subir la respuesta, la aceptaría automáticamente. Esto está arreglado ahora, y espero recordarlo la próxima vez;) – radiospiel

Cuestiones relacionadas