用于清理用户输入标题以使其显示在URL中的Java库?

时间:2013-05-21 20:39:13

标签: java url text

我正在做一个Web应用程序。我希望有一个SEO友好的链接,如下所示:

http://somesite.org/user-entered-title

以上用户输入的标题是从用户创建的记录中提取的,这些记录有一个名为title的字段。

我想知道是否有任何Java库用于清理此类用户输入的文本(例如删除空格),然后再将其显示在URL中。

从用户输入的“stackoverflow很棒”清理后,我的目标文本就像“stackoverflow-is-great”。

我能够编写代码来用破折号替换字符串中的空格,但不确定其他规则/想法/最佳实践是什么使文本成为网址的一部分。

请注意,用户输入的标题可能使用不同的语言,而不仅仅是英语。

感谢任何输入和指针!

问候。

2 个答案:

答案 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是您需要的课程。

英语以外的语言不应该是一个问题,因为该类允许您指定字符编码,它会处理重音等特殊字符。