两个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]

6 条评论 发表在“两个Ruby小函数:URLDecode/URLEncode”上

  1. 游客说道:

    不错,正需要这个呢

  2. kenlistian说道:

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

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

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

  3. kenlistian说道:

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

  4. 兔毛猫说道:

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

  5. 兔毛猫说道:

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

  6. pass说道:

    一CGI::inescape => CGI::unescape

留下回复