编码网址的最佳方式?

时间:2009-12-02 17:02:27

标签: ruby-on-rails

我目前正在开发一个CMS,并希望以一种很好的方式对URL中的特殊字符进行编码。 我不想使用Rack :: Utils.escape。

有没有可用的酷宝石?

祝你好运

3 个答案:

答案 0 :(得分:3)

看看stringex gem here,它甚至可以在没有rails的情况下使用,但包含一些东西以便于使用(使用rails)。

答案 1 :(得分:1)

Ruby的CGI库应该满足您的需求:

url_encoded_string = CGI::escape("'Stop!' said Fred")
# => "%27Stop%21%27+said+Fred"

请参阅http://ruby-doc.org/core/classes/CGI.html

答案 2 :(得分:0)

好吧,我通常使用一种名为String.to_slug的方便的自定义方法。我希望你觉得它很有用。

调用此/lib/to_slug.rb并将其包含在一个初始值设定项中,或仅将其包含在生成URL的模型中。

String.class_eval do

  #converts accented letters into ascii equivalents (eg. ñ becomes n)
  def normalize
    #this version is in the forums but didn't work for me
    #chars.normalize(:kd).gsub!(/[^\x00-\x7F]/n,'').to_s
    mb_chars.normalize(:d).gsub(/[^\x00-\x7F]/n,'').to_s
  end

  #returns an array of strings containing the words on a string
  def words
    gsub(/\W/, ' ').split
  end

  #convert into a nice url-ish string
  def to_slug(separator='-')
    strip.downcase.normalize.words.join(separator)
  end

end