Groovy 创建URL友好字符串

Groovy 创建URL友好字符串,groovy,Groovy,我有一个字符串,我想使url友好。字符串可能如下所示:包含$trange字符的字符串!“然后我想转义所有错误的url字符,并以a-string-with-trange-characters结束 在Groovy中实现这一点的最佳方法是什么?这行吗 string.replaceAll( /[^0-9a-zA-Z ]/, '' ).tr( ' ', '-' ) 这行吗 string.replaceAll( /[^0-9a-zA-Z ]/, '' ).tr( ' ', '-' ) 在许多情况下,您可

我有一个字符串,我想使url友好。字符串可能如下所示:
包含$trange字符的字符串!“
然后我想转义所有错误的url字符,并以
a-string-with-trange-characters结束

在Groovy中实现这一点的最佳方法是什么?

这行吗

string.replaceAll( /[^0-9a-zA-Z ]/, '' ).tr( ' ', '-' )
这行吗

string.replaceAll( /[^0-9a-zA-Z ]/, '' ).tr( ' ', '-' )

在许多情况下,您可能不希望完全剥离非字母数字字符,而是首先分解它们:

import java.text.Normalizer

println Normalizer.normalize("String with \$strang\u00E9 chars", Normalizer.Form.NFD)
    .replaceAll(/[^A-z0-9 ]/, "")
    .replaceAll(/ +/, "-")
在上面的代码中,
\u00E9
是“é”。分解将其转换为字符“e”和组合标记“')。因此,当应用转换时,结果是“奇怪-”而不是“strang-”


请注意,这并不是获取给定字符串的ASCII友好版本的全部内容……例如,它不会将“”转换为“ss”。我不知道在Java/Groovy中实现这一点的最佳方法(在初始字符串上使用toUpperCase().toLowerCase()似乎有点“hacky”).

在许多情况下,您可能不希望完全去除非字母数字字符,而是首先分解它们:

import java.text.Normalizer

println Normalizer.normalize("String with \$strang\u00E9 chars", Normalizer.Form.NFD)
    .replaceAll(/[^A-z0-9 ]/, "")
    .replaceAll(/ +/, "-")
在上面的代码中,
\u00E9
是“é”。分解将其转换为字符“e”和组合标记“')。因此,当应用转换时,结果是“奇怪-”而不是“strang-”


请注意,这并不是获取给定字符串的ASCII友好版本的全部内容……例如,它不会将“”转换为“ss”。我不知道在Java/Groovy中实现这一点的最佳方法(在初始字符串上使用toUpperCase().toLowerCase()似乎有点“hacky”)。

请注意:如果您曾经有两个不同的部分-奇怪的“字符串”,您的方法有时会将它们解析为相同的URL友好等价物。希望在实际URL中包含这些字符串时,您还将包含唯一的数字标识符。此外,请注意给定字符串完全“奇怪”的情况,例如
ノー
$$$!
,因为在这种情况下,您的结果将是空的,您必须小心如何将其集成到URL中,以避免表单
的URLhttp://host/some/path//id
,其中结果应该在
路径
id
之间。请注意:如果您有两个不同的partially—“奇怪”字符串,您的方法有时会将它们解析为相同的URL友好等价物。希望在实际URL中包含这些字符串时,您还将包含唯一的数字标识符。此外,请注意给定字符串完全“奇怪”的情况,例如
ノー
$$$!
,因为在这种情况下,您的结果将是空的,您必须小心如何将其集成到URL中,以避免表单
的URLhttp://host/some/path//id
,其中结果应该在
路径
id
之间。