将 "%20" 替换为 URL 中的"-" 对于 Rail)



我正在使用rails开发一个web应用程序。为了美观起见,我需要将%20替换为-

电影

: http://localhost: 3000//2006/Apna % 20 sapna % 20 % 20钱

电影

后:http://localhost: 3000//2006/Apna-Sapna-Money-Money

无论如何我可以在rails中实现这一点?

您应该使用URI.parse将其分成几个部分,然后仅更改路径组件:

require 'uri'
u      = URI.parse(url)
u.path = u.path.gsub('%20', '-')
url    = u.to_s

在整个URL上一个简单的gsub可能会工作得很好,但是一点额外的偏执可能会为您节省一些困惑和痛苦。此外,如果您只是替换字符串而不是正则表达式,则可以使用string作为gsub的第一个参数并避免一些转义问题:

模式通常是一个Regexp;如果作为字符串给出,它包含的任何正则表达式元字符将按字面解释,例如'\d'将匹配后跟d的反弹,而不是数字。

如果字符串存储在变量url中,则可以使用

url.gsub(/%20/, "-")

返回你想要的字符串,或者

url.gsub!(/%20/, "-")

url的值修改为您想要的值

https://github.com/FriendlyId/friendly_id

这是搜索引擎优化url的最佳方式

您可能希望在Movies模型中保存"Apna-Sapna-Money-Money"作为属性(我通常称之为slug s)。然后,为了生成这些属性,您可能只需要将电影标题中的空格替换为连字符。比如:

class Movie
  before_create :generate_slug
  private
  def generate_slug
    slug = title.gsub(" ", "-")
  end
end

然后在你的控制器动作中,你可以简单地做一个Movie.find_by_slug!(params[:id])调用。

基本上,用户应该没有理由访问包含%20的URL…

相关内容

最新更新