我想以更易查询的类似slug的格式将字符串存储到数据库中,强制它为小写,用他们的拉丁语对应代替重音字母(ä - > a,ö - > o,ç - > c等)并用例如替换其他特殊字符破折号。这种格式有标准吗?什么是优选的意味着在Java中实现它?
答案 0 :(得分:0)
数据库可以通过排序规则为您完成此操作。排序规则指定特定字符集中的哪些字符在比较时可视为彼此等效。
查看整理的可视示例:
http://www.collation-charts.org/mysql60/mysql604.utf8_general_ci.european.html
以下是对MySQL手册中排序规则如何工作的一个很好的描述:
答案 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。