1

我正在做一个网络应用程序。我想要一个对 SEO 友好的链接,如下所示:

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

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

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

从用户输入的“stackoverflow 很棒”进行清理后,我的目标文本是诸如“stackoverflow-is-great”之类的内容。

我可以编写代码来用破折号替换字符串中的空格,但不确定还有哪些其他规则/想法/最佳实践可以使文本成为 url 的一部分。

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

感谢您的任何输入和指针!

问候。

4

2 回答 2

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(请参见此处的示例地图)。你需要它们,我相信你最好的选择是做一个。

于 2013-05-21T21:21:42.303 回答
1

您似乎想对字符串进行 URL 编码。在核心 Java 中是可能的,无需使用外部库。URLEncoder是您需要的课程。

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

于 2013-05-21T21:12:03.780 回答