两个Ruby小函数:URLDecode/URLEncode

作者:半瓶墨水 链接:http://www.2maomao.com/blog/2-ruby-cookies-en-de-code/

在解码、编码URL时常用到的URLDecode和URLEncode,用Ruby写了一下,应该可以应付中英文的情况了:

def URLDecode(str)
  
str.gsub!(/%[a-fA-F0-9]{2}/) { |x| x = x[1..2].hex.chr }
end
 
def URLEncode(str)
  
str.gsub!(/[^\w$&\-+.,\/:;=?@]/) { |x| x = format("%%%x", x[0]) }
end

tmd,ruby太不是东西,没有Char这个类型,一个字符转为一个整型值很容易,一个整形转回一个字符的方法我查了n久才发现原来可以用Integer:chr函数解决。
Update:
好吧,我承认,我是一个Ruby土人:CGI::escape, CGI::inescape, CGI::escapeHTML, CGI::inescapeHTML,
参见:http://www.ruby-doc.org/core/classes/CGI.html

标签:[tag]ruby[/tag]

  • Share/Bookmark

共 6 条评论

  • 游客 三月 29th, 2007 3:45 下午

不错,正需要这个呢

  • kenlistian 三月 19th, 2008 5:49 下午

不支持中文,不过改正如下:

def urlencode(str)
str.gsub(/[^a-zA-Z0-9_\.\-]/n) {|s| sprintf(’%%%02x’, s[0]) }
end

在ruby1.8中已经在http和url中有支持。

  • kenlistian 三月 19th, 2008 5:52 下午

搞错,是支持中文,不过你句子中”%%%x”, 打错了。

@kenlistian
多谢指出,不过,”%%%x” 应该是什么? 我给改改。

@kenlistian
我搞清楚了,万恶的RichEDIT自动全半角切换 :X
用Coolcode就没事了:D

  • pass 六月 14th, 2009 12:01 上午

一CGI::inescape => CGI::unescape

发表评论

  • :l
  • :)
  • :q
  • :(
  • :^
  • :x
  • :v
  • :D
  • :s
  • :h
  • :e
  • :X
  • :k
  • :w
  • :d
  • :p

注意:评论中需包含至少一个中文字,否则视为无效

Additional comments powered by BackType