2017-04-18 64 views
2

我的問題與此Rails friendly id with non-Latin characters密切相關。按照那裏的建議答案,我實現了一點點不同的解決方案(我知道,這是很原始的,但我只是想確保它在添加複雜行爲之前能夠正常工作)。Rails friendly_id with arabic slug

以我的用戶模型我有:

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,蛞蝓值被設定爲「%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-,這不是我想要的。有誰知道這些額外的%25來自哪裏,爲什麼?

回答

0

與此同時,我又來了一點,所以我把我的解決方案放在這裏,可能對別人有幫助。 網址中的25s似乎是url_encoding我的slu'中'%'的結果。我不知道發生了什麼,但我修改了我的normalize_friendly_id函數,這樣它就不再影響我了。那就是:

def normalize_friendly_id(value) 
    sep = '-' 
    #strip out tashkeel etc... 
    parameterized_string = value.to_s.gsub(/[\u0610-\u061A\u064B-\u065F\u06D6-\u06DC\u06DF-\u06E8\u06EA-\u06ED]/,''.freeze) 
    # Turn unwanted chars into the separator 
    parameterized_string.gsub!(/[^0-9A-Za-zÀ-ÖØ-öø-ÿ\u0620-\u064A\u0660-\u0669\u0671-\u06D3\u06F0-\u06F9\u0751-\u077F]+/,sep) 
    unless sep.nil? || sep.empty? 
    re_sep = Regexp.escape(sep) 
    # No more than one of the separator in a row. 
    parameterized_string.gsub!(/#{re_sep}{2,}/, sep) 
    # Remove leading/trailing separator. 
    parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/, ''.freeze) 
    end 
    parameterized_string.downcase 
end 

上一些評論:

  • 我只用了拉丁文和阿拉伯字母考慮
  • 我決定,如果我允許的URL阿拉伯字符,那麼就沒有感覺保持轉換的friendly_id行爲例如「ü」改爲「ue」,「ö」改爲「oe」等。所以我把這些字符留在了url中。
  • 我還試圖保留可能不會用在阿拉伯文字符中的字符,但是在使用阿拉伯字母表的其他語言中,例如波斯語或烏爾都語。我只說阿拉伯語,所以我猜測哪些字符在其他語言中可能被認爲是正規的。例如,「ڿ」是任何語言的常用字符?我不知道,但我想它可能是。
  • 再次,因爲我講阿拉伯語,我從文本中剝離了「塔什基爾」。我會說,那些沒有塔什庫爾文本的文本通常比那些沒有塔什庫爾文本的文本更容易閱讀。但是,我不知道我是否應該照顧其他語言的一些類似的東西。任何提示都非常感謝。
  • 最後:添加另一個字母表就像向正則表達式添加適當的序列一樣簡單。人們只需要知道哪些字符應該是白名單。

我很欣賞任何意見或改進建議。

相關問題