2012-05-09 17 views
7

Ecco il problema: la libreria URI di Ruby non tratta le dieresi; Ad esempioCome utilizzare le dieresi con la libreria URI di Ruby

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

Come posso gestirlo? Questo è Ruby 1.9.2, btw.

+0

Questo accade con altri caratteri Unicode, non solo quelli con dieresi. –

+2

La biblioteca ha ragione, questi personaggi sono illegali in uris. Dovresti fuggire da loro. –

+1

I browser sono in grado di gestire le dieresi negli URL semplicemente bene; come faccio a cosa fa il browser? – radiospiel

risposta

13

chiamata URI.encode prima analisi:

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

Come nota a margine, essere consapevoli del fatto che se l'URL contiene un frammento hash (#something), si dovrà dividere manualmente:

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

Questo è fantastico! Non volevo assolutamente usare Addressable ed eccolo qui, una soluzione valida con URI. – ujifgc

4

La gemma Addressable è ciò che si desidera utilizzare per trattare con gli IRI.

+0

Fantastico, funziona come un incantesimo. – radiospiel

+0

Quindi, probabilmente dovresti accettare la risposta in modo che altri possano saperlo e così Sean può ottenere alcuni punti di reputazione nuovi e nodosi. :) – vlasits

+0

Mi spiace, ho pensato di svalutare la risposta, l'avrei accettata automaticamente. Questo è stato risolto ora, e spero di ricordarmelo la prossima volta;) – radiospiel

Problemi correlati