标签: addressable-gem

显示来自带有ruby的规范化URI的IDN(使用可寻址宝石)

在我的Ruby应用程序中,我需要处理来自用户输入的URI(实际上是IRI)

str = "http://??????.???????/?????_?????"
Run Code Online (Sandbox Code Playgroud)

我使用Addressable对这些进行规范化,并且只存储规范化的形式:

normalized = Addressable::URI.parse(str).normalize
normalized.to_s
#=> http://xn--p1b6ci4b4b3a.xn--11b5bs3a9aj6g/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A5%8D%E0%A4%AF_%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0
Run Code Online (Sandbox Code Playgroud)

这很好用,但显然不适合显示给最终用户.

为此,我想将此URI转换回其原始形式(非punycode,非百分比编码路径)

可寻址有display_uri,但只转换主机:

nicer = normalized.display_uri.to_s
#=> http://??????.???????/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A5%8D%E0%A4%AF_%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0
Run Code Online (Sandbox Code Playgroud)

这看起来很有效:

display_s = Addressable::URI.parse(str).display_uri.to_s
pretty = Addressable::URI.unencode(display_s.force_encoding("ASCII-8BIT"))
Run Code Online (Sandbox Code Playgroud)

但是,该代码看起来不对(我不应该使用force_encoding),我完全不相信它是正确的.

  • 将整个URI转换为可供最终用户使用的东西的好方法是什么?("http://??????.???????/?????_?????")

  • 存储规范化的URI即使是一个好主意,还是会产生我可能不知道的后果?

代码:https://gist.github.com/levinalex/6115764

TL;博士

我怎么转换这个:

"http://xn--p1b6ci4b4b3a.xn--11b5bs3a9aj6g/" +
"%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A5%8D%E0%A4" +
"%AF_%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0"
Run Code Online (Sandbox Code Playgroud)

对此:

"http://??????.???????/?????_?????"
Run Code Online (Sandbox Code Playgroud)

ruby uri idn ruby-2.0 addressable-gem

5
推荐指数
1
解决办法
521
查看次数

从Addressable对象获取完整的URI?

如果我有一个像这样的可寻址对象:

uri = Addressable::URI.parse("http://example.com/path/to/resource/")
Run Code Online (Sandbox Code Playgroud)

我如何回到" http://example.com/path/to/resource/ " - 我已经查看了uri.methods,但我没有看到我将使用哪一个来获取完整的URI.

ruby addressable-gem

3
推荐指数
1
解决办法
1028
查看次数

addressable/uri在ruby中按字母顺序给出params

addressable/uri 按字母顺序给出params .如果我想在散列中获取查询参数(即nonce,method,rate,order_type,quantity),我该如何更改代码?

2.1.0 :060 > require "addressable/uri"
2.1.0 :061 > uri = Addressable::URI.new
2.1.0 :062 > uri.query_values = Hash["nonce" => 1405069051840, "method" => "a", "rate" => "rate", "order_type" => "order_type", "quantity" => "quantity"]
 => {"nonce"=>1405069051840, "method"=>"a", "rate"=>"rate", "order_type"=>"order_type", "quantity"=>"quantity"} 
2.1.0 :063 > params = uri.query
 => "method=a&nonce=1405069051840&order_type=order_type&quantity=quantity&rate=rate" 
Run Code Online (Sandbox Code Playgroud)

我需要这样的输出:(因为我通过)

"nonce=1405069051840&method=a&rate=rate&order_type=order_type&quantity=quantity"
Run Code Online (Sandbox Code Playgroud)

现在输出是(字母顺序)

"method=a&nonce=1405069051840&order_type=order_type&quantity=quantity&rate=rate" 
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails addressable-gem

2
推荐指数
1
解决办法
470
查看次数

标签 统计

addressable-gem ×3

ruby ×3

idn ×1

ruby-2.0 ×1

ruby-on-rails ×1

uri ×1