从标题生成唯一的标识符

3

在处理重复的标识符时,什么是最好的方法呢?例如,如果标识符是博客文章的话。似乎标准的标识符转换会删除所有非字母数字字符,然后变为小写字母,并最后使用下划线或连字符来分隔空格。但是,存在一些问题,例如:

标题 => 标识符

  1. Top 500 Sport Activities => top-500-sports-activities
  2. Top $500 Sports Activities => top-500-sports-activities

这里有两个唯一标题的标识符重复了。有没有一种方法可以解决这个问题?也许是简单而安全的符号转换?

然而,我希望能够从每个标题中生成相同的标识符,以防止重复的发布项目。


是的,我认为你已经总结了WordPress的sanitize_title_with_dashes()的工作原理。一些CMS允许重复的标题(例如“New Post”),并将slug处理为new-post-1、new-post-2等。你可以手动编写slug。 - Martin Burch
是的,我正在寻找一个唯一的ID,但我不喜欢WordPress系统。我正在开发的项目依赖于slug的样式。在Restful slug中使用像$ ; @ ? !这样的字符安全吗?还是浏览器会破坏它们? - film42
2个回答

5

由于鸽巢原理,通常情况下无法获得唯一的slug。你正在从一个更大的集合映射到一个较小的集合,这意味着会出现重复。

当然,你可以使用符号技巧,尝试插入下划线或破折号来避免重复。但这不是一个通用的解决方案,因为并非所有符号都可以使用(否则就不需要slug了)。你可能需要添加另一个标记到URL中,例如日期或序列号。


2
看起来我得使用“top-500-sports-activities”,然后检查它是否存在,如果不存在就尝试用WordPress风格的“-number”:top-500-sports-activities-1,top-500-sports-activities-2。但感谢你指出抽屉原理,那是一个非常有趣的阅读材料。 - film42

0

考虑在您的URL中添加年/月/日以支持非唯一标识符。同时,请记得将日期字段添加到您的唯一约束条件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接