10

该方法应该只允许0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-在 URI 字符串中使用 " " 字符。

制作漂亮的 SEO URI 字符串的最佳方法是什么?

4

3 回答 3

36

这是普遍的共识:

  1. 小写字符串。

    string = string.toLowerCase();
    
  2. 规范化所有字符并去掉所有变音符号(例如,é、ö、à 变为 e、o、a)。

    string = Normalizer.normalize(string, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
    
  3. 替换所有剩余的非字母数字字符-并在必要时折叠。

    string = string.replaceAll("[^\\p{Alnum}]+", "-");
    

所以,总结一下:

public static String toPrettyURL(String string) {
    return Normalizer.normalize(string.toLowerCase(), Form.NFD)
        .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
        .replaceAll("[^\\p{Alnum}]+", "-");
}
于 2011-01-03T01:37:51.570 回答
4

以下正则表达式将与您的算法执行相同的操作。我不知道图书馆可以做这种事情。

字符串 s = 输入
.replaceAll(" ?- ?","-") // 删除连字符周围的空格
.replaceAll("[ ']","-") // 把空格和引号变成连字符
.replaceAll("[^0-9a-zA-Z-]",""); // 删除不在我们允许的字符集中的所有内容
于 2011-01-02T23:20:42.400 回答
1

如果您想搜索更多信息,这些通常称为“slug”。

您可能想查看其他答案,例如如何从字符串创建 SEO 友好的破折号分隔 url?以及如何使 Django slugify 与 Unicode 字符串一起正常工作?

它们涵盖了 C# 和 Python,而不是 javascript,但对 slug 约定和您在制作它们时可能面临的问题(例如唯一性、unicode 规范化问题等)进行了一些与语言无关的讨论。

于 2011-01-03T01:49:26.813 回答