首页 > 解决方案 > 如何确保 slug 不包含重音字符?

问题描述

标题说明了一切。向页面或图像添加标题时,如果该标题包含重音字符,则会反映在 URL 中。例如,标题为“Événements”的作品将生成一个 slug“événements”。

虽然我同意这是有效的,并且它在浏览器的引擎盖下一次转换为 % 字符(例如“%C3%A9v%C3%A9nement”),但这不是当前项目所期望的。

有没有办法在更新 slug 时捕捉到,并选择用我们选择的任何等价物手动替换重音字符?目前我们正在手动纠正这些蛞蝓,显然有些人会从裂缝中溜走。

标签: apostrophe-cms

解决方案


这些是通过实用程序方法中sluggo实用程序(最初为 Apostrophe 构建的)运行的slugify。有一个副本作为浏览器实用程序,另一个作为服务器端实用程序

您可以覆盖或扩展那些(用超级模式扩展会更好)来替换重音字符。我找到了一些选项来做到这一点(这里是一个)。

这是服务器端的,例如:

// in lib/modules/apostrophe-utils/index.js
module.exports = {
  construct: function (self, options) {
    const superSlugify = self.slugify;
    self.slugify = function (s, options) {
      const slug = superSlugify(s, options);
      const newSlug = slug.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
      return newSlug;
    };
  }
};

您还希望执行客户端操作以避免潜在的编辑器混淆,尽管您只能摆脱这种情况。

或者,如果您愿意,可以将其作为 sluggo 软件包的一个选项进行 PR,然后可以将其作为apostrophe-utils.


推荐阅读