2012-05-09 30 views
7

下面是问题:Ruby的URI库不处理变音符号;即如何在ruby的URI库中使用变音符号

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

我该如何处理?这是Ruby 1.9.2,顺便说一句。

+0

这发生在其他unicode字符上,而不仅仅是那些带有元音变音的字符。 –

+2

图书馆的权利,这些字符在uris中是非法的。你应该逃避它们。 –

+1

浏览器可以在URL中处理变音符号;我怎么做浏览器呢? – radiospiel

回答

13

呼叫URI.encode解析之前:

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

作为一个侧面说明,要知道,如果URL包含哈希片段(#something),你必须手动把它分解:

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

这太棒了!我完全不想使用Addressable,它是一个有效的URI解决方案。 – ujifgc

4

Addressable宝石是你想用来处理IRIs。

+0

真棒,作品像一个魅力。 – radiospiel

+0

然后,你应该接受答案,以便其他人可以知道,所以肖恩可以得到一些粗糙的新声望点。 :) – vlasits

+0

对不起,我认为通过upvoting答案我会自动接受它。现在已经修复了,我希望我记得下一次;) – radiospiel