如何将带有法语口音的字符串转换为URL(替换重音字母)?

时间:2013-10-06 21:09:24

标签: regex clojure

我想基于字符串创建网址,自动将带有法语口音的字符串转换为网址。

(defn str->url [] ...)
(defn str->url-case [] ...)

(str->url "Élise Noël")
;=> "/elise-noel"
(str->url-case "Élise Noël")
;=> "/Elise-Noel"

以下是非重音字母等价物:

À, Â -> A 
Æ -> AE
Ç -> C
É, È, Ê, Ë -> E
Î, Ï -> I
Ô -> O
Œ -> OE 
Ù, Û, Ü -> U    
Ÿ -> Y

à, â -> a
æ -> ae
ç -> c
é, è, ê, ë -> e
î, ï -> i 
ô -> o
œ -> oe
ù, û, ü -> u
ÿ -> y

谢谢!

1 个答案:

答案 0 :(得分:3)

要使用官方网址编码格式(application/x-www-form-urlencoded),这与删除重音不同,您可以这样做:

user> (java.net.URLEncoder/encode "Élise Noël" "UTF-8")
"%C3%89lise+No%C3%ABl"

要使用问题中的替换,只需将clojure.string/replace与每个替换对映射到字符串上。

这是一个例子,只有示例字符串的必要替换对。只需遵循相同的模式:

(reduce (fn [s [pat repl]]
          (clojure.string/replace s pat repl))
        "Élise Noël"
        [[" " "-"]
         [#"[ÉÈÊË]" "E"]
         [#"[éèêë]" "e"]])