繁体   English   中英

将 URL 中用于导轨的“%20”替换为“-”

[英]Replace “%20” with “-” in URL for rails

我正在使用 rails 开发 web 应用程序。 出于美学目的,我需要将 %20 替换为 -

之前: http://localhost:3000/movies/2006/Apna%20Sapna%20Money%20Money

之后: http://localhost:3000/movies/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的第一个参数,并避免一些 escaping 问题:

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

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

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

返回您想要的字符串,或

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

用您想要的值实际修改url的值。

https://github.com/FriendlyId/friendly_id

这是 go 关于 seo 网址的最佳方式

您可能希望在您的Movies model 中保存“Apna-Sapna-Money-Money”作为属性(我通常称这些slug s)。 然后,要生成这些,您可能只需要用连字符替换电影标题中的空格。 就像是:

class Movie
  before_create :generate_slug

  private
  def generate_slug
    slug = title.gsub(" ", "-")
  end
end

然后在您的 controller 操作中,您可以简单地执行Movie.find_by_slug:(params[:id])调用。

基本上,用户应该没有理由到达带有 %20 的 URL ......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM