【问题标题】:Best way to create SEO friendly URI string创建 SEO 友好的 URI 字符串的最佳方法
【发布时间】:2011-06-02 15:13:55
【问题描述】:

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

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

【问题讨论】:

  • 这听起来是个糟糕的主意。请考虑使用encoding the URL
  • @marcog:这听起来很像 SO 从标题生成对 SEO 友好的 URL。请注意,我很想用一个连字符替换所有非 alnum 字符序列;相同的一般效果(如果在极端情况下可能略有不同)但更容易理解。
  • @Donal 哦,对。不过,您肯定会从允许的字符集中生成一个随机字符串吗?
  • @marcog:SO 所做的是将那部分(实际上无关紧要)放在 URL 的末尾;之前的路径片段是一个 ID,它是实际定位问题的位置。为此使用用户输入是安全的,因为清理是根据严格的字符白名单定义的。 (随机字符串?这是从哪里来的?)
  • @Donal 好的,我明白你指的是什么。我以为你的意思是ID,例如4581025 这个问题。感谢您的澄清!

标签: java string char uri slug


【解决方案1】:

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

您可能想查看其他答案,例如 How can I create a SEO friendly dash-delimited url from a string?How to make Django slugify work properly with Unicode strings?

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

【讨论】:

    【解决方案2】:

    这是普遍共识:

    1. Lowercase 字符串。

      string = string.toLowerCase();
      
    2. Normalize所有字符并去掉所有diacritical marks(这样例如é、ö、à变成e、o、a)。

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

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

    所以,总结一下:

    public static String toPrettyURL(String string) {
        return Normalizer.normalize(string.toLowerCase(), Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
            .replaceAll("[^\\p{Alnum}]+", "-");
    }
    

    【讨论】:

    • 还建议删除前导和尾随标点符号。 // 删除结尾标点符号 .replaceAll("[^a-z0-9]+$", "") // 删除开头标点符号 .replaceAll("^[^a-z0-9]+", "");
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 2011-04-28
      • 2010-10-02
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多