Rails friendly_id与阿拉伯slu ..

时间:2017-04-18 21:29:27

标签: ruby-on-rails url arabic friendly-id

我的问题与这个Rails friendly id with non-Latin characters密切相关。根据那里的建议答案,我实现了一个不同的解决方案(我知道,它是原始的,但我只想确保它在添加复杂行为之前有效)。

在我的用户模型中,我有:

extend FriendlyId
friendly_id :slug_candidates, :use => [:slugged]

def slug_candidates
  [ 
    [:first_name, :last_name],
    [:first_name, :last_name, :uid]
    ]
end

def should_generate_new_friendly_id?
  first_name_changed? || last_name_changed? || uid_changed? || super
end

def normalize_friendly_id(value)
  ERB::Util.url_encode(value.to_s.gsub("\s","-"))
end

现在当我通过浏览器提交“مرحبا”:first_name时,数据库中的slug值设置为“%D9%85%D8%B1%D8%AD%D8%A8%D8%A7-”是我所期望的(除了尾随“ - ”)。

然而,浏览器中显示的网址如下所示:http://localhost:3000/en/users/%25D9%2585%25D8%25B1%25D8%25AD%25D8%25A8%25D8%25A7-,这不是我想要的。有谁知道这些额外的%25s来自哪里以及为什么?

1 个答案:

答案 0 :(得分:0)

与此同时,我来得更远,所以我把解决方案放在这里也许对其他人有帮助。 url中的25s似乎是url_encoding我的slug中'%'的结果。我不知道这发生了什么,但我修改了我的normalize_friendly_id函数,所以它不再影响我了。这是:

bmi.bmiHeader.biHeight = - nScreenHeight;

对此有一些评论:

  • 我只考虑了拉丁字母和阿拉伯字母
  • 我决定如果我在网址中允许使用阿拉伯字符,那么就没有必要保持friendly_id的转换行为,例如“ü”到“ue”,“ö”到“oe”等等。所以我将这些字符留在网址中。
  • 我还尝试保留可能不会用于阿拉伯语的字符,但也使用其他使用阿拉伯字母的语言,如波斯语或乌尔都语。我只讲阿拉伯语,所以我猜测哪些字符在其他语言中可能被视为常规字符。例如,“ڿ”是任何语言的常规字符吗?我不知道,但我想这很可能。
  • 再次,因为我讲阿拉伯语,我从文本中删除了“Tashkil”。我会说,没有tashkil的文本通常比那些有文本的文本更容易阅读。但是,我不知道是否应该用其他语言处理类似的东西。任何提示都非常感谢。
  • 最后:添加另一个字母表就像在正则表达式中添加适当的序列一样简单。只需要知道哪些字符应该是白名单。

我感谢任何评论或改进建议。