2012-05-09 67 views
7

Oto problem: biblioteka URI Ruby nie zajmuje się umlautami; tj.Jak używać umlautów z biblioteką URI ruby ​​

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

Jak sobie z tym poradzić? To jest Ruby 1.9.2, btw.

+0

Tak dzieje się w przypadku innych znaków Unicode, nie tylko tych z umlautami. –

+2

Prawa biblioteki, te postacie są nielegalne w uris. Powinieneś uciec od nich. –

+1

Przeglądarki potrafią radzić sobie z umlautami w URL-ach; jak mam zrobić przeglądarkę? – radiospiel

Odpowiedz

13

połączeń URI.encode przed parsowania:

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

Na marginesie należy pamiętać, że jeśli adres URL zawiera fragment hash (#something), będziesz musiał ręcznie podzielić go:

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

To jest niesamowite! Całkowicie nie chciałem korzystać z Adresowalnych i oto jest, prawidłowe rozwiązanie z URI. – ujifgc

4

Klejnotem o wartości Addressable jest to, czego chcesz używać do wykrywania IRI.

+0

Awesome, działa jak urok. – radiospiel

+0

Wtedy prawdopodobnie powinieneś zaakceptować odpowiedź, aby inni mogli ją poznać, więc Sean może zdobyć trochę nowe punkty reputacji. :) – vlasits

+0

Przepraszam, myślałem, że przegłosowując odpowiedź, zaakceptuję ją automatycznie. Naprawiono to teraz i mam nadzieję, że pamiętam to następnym razem;) – radiospiel

Powiązane problemy