【问题标题】:Rails 3: Umlauts (or other unicode) in routesRails 3:路线中的元音变音(或其他 unicode)
【发布时间】:2011-10-25 09:54:32
【问题描述】:

我有一个与Ruby on Rails. Unicode routes 类似的问题,但标记为在那里工作的答案对我不起作用。

我想为包含变音符号 (ä) 的登录页面设置基本路径。出于 SEO 的目的,它必须完全一样。

# encoding: UTF-8
Udb::Application.routes.draw do
  get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference

当我在浏览器中输入http://localhost/bonitätsauskunft 时,出现路由错误No route matches "/bonit%c3%a4tsauskunft"。所以查询字符串在与路由匹配之前没有转义,我认为这很糟糕,因为有多种方法可以对 URL 中的变音符号进行编码,我不知道浏览器使用哪一种。

例如CGI.escape("bonitätsauskunft") # => "bonit%C3%A4tsauskunft",注意大写 C3 和 A4,而不是像 Firefox 发送的 c3 和 a4。

所以get CGI.escape("bonitätsauskunft")Rack::Utils.escape("bonitätsauskunft") 都不匹配。

我也试过了,没有运气:

get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :page => /bonitätsauskunft/
get ":page" => "landing_pages#credit_reference", :as => :lp_credit_reference, :constraints => {:page => /bonitätsauskunft/}

唯一对我有用的是尴尬:

# encoding: UTF-8
class UmlautConstraint
  def initialize(page)
    @page = page
  end

  def matches?(request)
    request.params[:page] == @page
  end
end

Udb::Application.routes.draw do
  get ":page" => "landing_pages#credit_reference", :constraints => UmlautConstraint.new("bonitätsauskunft")
  get "bonitätsauskunft" => "landing_pages#credit_reference", :as => :lp_credit_reference

当然,需要第二条路线,因此我可以使用命名路线来创建像 link_to("Bonitätsauskunft", :lp_credit_reference) 这样的链接,因为 Rails 不知道如何满足 UmlautConstraint。

难道没有一种正常且简单的方法可以做到这一点吗?我真的认为 Rails 3 现在国际化会更好。

Rails 3.0.10、Ruby 1.9.2、Apache2 和乘客 3.0.7。

【问题讨论】:

    标签: ruby-on-rails unicode routes diacritics


    【解决方案1】:

    通过CGI.escape("bonitätsauskunft").downcase 使用您的第一个想法

    它适用于任何浏览器。它不依赖于浏览器编码,而是依赖于 SERVER 编码。当您使用其他服务器 (webrick) 时,可能需要更改路由。

    我用这种“unicode”路由成功了一段时间,确实有很好的SEO效果。

    【讨论】:

    • 也许两者都可以确定? get CGI.escape("neugründungen").downcase => "landing_pages#startups", :as => :lp_startups get CGI.escape("neugründungen") => "landing_pages#startups"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多