我正在做一个Web应用程序。我希望有一个SEO友好的链接,如下所示:
http://somesite.org/user-entered-title
以上用户输入的标题是从用户创建的记录中提取的,这些记录有一个名为title的字段。
我想知道是否有任何Java库用于清理此类用户输入的文本(例如删除空格),然后再将其显示在URL中。
从用户输入的“stackoverflow很棒”清理后,我的目标文本就像“stackoverflow-is-great”。
我能够编写代码来用破折号替换字符串中的空格,但不确定其他规则/想法/最佳实践是什么使文本成为网址的一部分。
请注意,用户输入的标题可能使用不同的语言,而不仅仅是英语。
感谢任何输入和指针!
问候。
答案 0 :(得分:4)
你想要的是某种“ SLUGifying ”前缀到URL,所以它是SEO友好的。
一旦遇到这个问题,我开始使用maddemcode.com中提供的解决方案。您可以在下面找到适合的代码。
诀窍是正确使用Normalize
JDK类并进行一些额外的清理。用法很简单:
// casingchange-aeiouaeiou-takesexcess-spaces
System.out.println(slugify("CaSiNgChAnGe áéíóúâêîôû takesexcess spaces "));
// these-are-good-special-characters-sic
System.out.println(slugify("These are good Special Characters šíč"));
// some-exceptions-123-aeiou
System.out.println(slugify(" some exceptions ¥123 ã~e~iõ~u!@#$%¨&*() "));
// gonna-accomplish-yadda
System.out.println(slugify("gonna accomplish, yadda, 완수하다, 소양양)이 있는 "));
功能代码:
public static String slugify(String input) {
return Normalizer.normalize(input, Normalizer.Form.NFD)
.replaceAll("[^\\p{ASCII}]", "")
.replaceAll("[^ \\w]", "").trim()
.replaceAll("\\s+", "-").toLowerCase(Locale.ENGLISH);
}
在源页面(http://maddemcode.com/java/seo-friendly-urls-using-slugify-in-java/)中,您可以查看其来源。不过上面的小片段也是一样的。
正如您所看到的,有一些特殊的字符未被转换。据我所知,翻译它们的每个人都使用某种地图,比如Djago的urlify(see example map here)。你需要它们,我相信你最好的选择就是制作它。
答案 1 :(得分:1)
您似乎想对字符串进行URL编码。它可以在核心Java中使用,而无需使用外部库。 URLEncoder
是您需要的课程。
英语以外的语言不应该是一个问题,因为该类允许您指定字符编码,它会处理重音等特殊字符。