创建可查询字符串

时间:2011-05-09 13:39:34

标签: java encoding slug

我想以更易查询的类似slug的格式将字符串存储到数据库中,强制它为小写,用他们的拉丁语对应代替重音字母(ä - > a,ö - > o,ç - > c等)并用例如替换其他特殊字符破折号。这种格式有标准吗?什么是优选的意味着在Java中实现它?

2 个答案:

答案 0 :(得分:0)

数据库可以通过排序规则为您完成此操作。排序规则指定特定字符集中的哪些字符在比较时可视为彼此等效。

查看整理的可视示例:

http://www.collation-charts.org/mysql60/mysql604.utf8_general_ci.european.html

以下是对MySQL手册中排序规则如何工作的一个很好的描述:

http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html

答案 1 :(得分:0)

这是迄今为止我发现效果最佳的解决方案:

return Normalizer
    .normalize(src.trim().toLowerCase(Locale.ENGLISH),
        Normalizer.Form.NFD)
    .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
    .replaceAll("[^\\p{ASCII}]+", "-")
    .replaceAll("[^a-z0-9]+", "-").replaceAll("(^-|-$)+", "");

这会转换:¿Qué? to que,Cool !!!! 1 to cool-1andåæøtoa。