固定链接/slug 最佳实践

Posted

技术标签:

【中文标题】固定链接/slug 最佳实践【英文标题】:Permalink/slug best practices 【发布时间】:2010-12-16 14:22:08 【问题描述】:

我即将在网站上设置永久链接,我想知道在从现有的新闻文章表中生成它们时我应该遵循什么样的约定。

到目前为止,这是我想出的规则/步骤:

    创建我的实时数据库的转储文件,在本地进行设置 使用ALTER table ADD column slug VARCHAR(100) 在我的news_articles 表中添加一个新的“永久链接”列(不确定数据类型或长度,建议?) 更新我的 news_articles 表中的每一行,这样

在标题经过一些格式化后,默认情况下永久链接列被标题替换:

免责声明:标题为俄语 西里尔文而不是英文所以我不 我想我可以轻松逃脱 正则表达式替换,除非我 依赖 unicode 代码范围,除了我 不熟悉的范围 西里尔字符,所以我会做手动 替换和我定义的规则 到目前为止是:

用下划线替换所有空格 去掉前导/尾随逗号和句点 删除所有单/双引号 删除所有问号 & 成为俄语单词中的“和”

在我实际执行当前策略之前,如果有任何关于我当前策略的建议,我将不胜感激,因为有成千上万篇文章。

【问题讨论】:

【参考方案1】:

一些cmets/建议

用下划线替换所有空格 (用hypen代替下划线怎么样,就像SO中的标签) 去掉前导/尾随逗号和句点 (前导/尾随空格) 删除所有单引号/双引号 (开头和结尾的引号,如果不替换为连字符) 删除所有问号 (同上,所有其他标点符号如“ ”(左/右双引号)和符号如 % 和 = 等) & 变成俄语中的“和”字 (你的意思是 и?必须是可读的而不需要url编码)

更新: * 将所有字符转换为小写 (有点主观,但这是一种常见的做法,比全部大写更具可读性)

还有一个建议,这是我用来检查我的 url 路径或 slug 是否不包含任何 urlencoded 字符串的技巧。在制定 slug 字符串后,我将执行 urlencode 并与预编码的进行比较。它们应该是相同的。

这篇文章的示例,如果 slug 恰好是“permalink-slug:best-practices”,则 urlencoded 将是“permalink-slug%3Abest-practices”,不是真正可读的,并且违背了您将知道/同意的 slug 的目的。所以很容易知道原始字符串不起作用,因为它在 urlencoding 之后是不同的。

【讨论】:

感谢您的建议。您是否在服务器端进行 slug 生成?您能否描述一下如何在 urlencoded 版本中检测这些类型的字符?您是否有诸如“%3A”之类的数组/正则表达式字符类,或者是否有更好的检测方法? 在我脑海中,我能想到的是遍历制定的 slug 字符串中的每个字符(在 urlencoding 之前)并检查字符是否属于 url 接受的字符集。有关可接受的字符,请参阅 w3.org/Addressing/URL/uri-spec.html 好的,我会在服务器端执行此操作。谢谢。 嘿,您在fancyzoom 上的另一个问题帖子中是同一个问题!哈哈,不客气! 是的,我只知道这些部分周围有一个地中海:p【参考方案2】:

我认为问题在于许多程序不允许使用 unicode url……***在文本中使用这些字符……在浏览器中它们看起来不错,但是在发送链接时它们变得很长……

http://th.wikipedia.org/wiki/%E0%B8%AA%E0%B9%89%E0%B8%A7%E0%B8%A1%E0%B9%83%E0%B8%99%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B9%80%E0%B8%97%E0%B8%A8%E0%B9%84%E0%B8%97%E0%B8%A2

我认为唯一好的解决方案是只转换为 A-Z 字母。其他语言只使用 ID。

如果有人对此有好的解决方案,我很想听听 :)

【讨论】:

以上是关于固定链接/slug 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

关于依赖项的最佳实践

调度操作并从同一组件中的 redux 获取状态的最佳实践?

链接到 Microsoft 编码标准/最佳实践文档?

JSF 中“返回”导航链接的最佳实践

最佳实践:如何跟踪出站链接?

Django 视图链接/重定向最佳实践