如何确保 slug 不包含重音字符?

How to ensure slugs do not contain accented characters?

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

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

有没有办法在 slug 更新时捕捉到,并选择用我们选择的任何等效字符手动替换重音字符?目前我们正在手动纠正这些 slug,显然有一些漏掉了。

那些是 运行 到 the sluggo utility (built originally for Apostrophe) in the slugify utility method. There's a copy as a browser utility and another as a server-side utility

您可以覆盖或扩展它们(用 the super pattern would be better) to replace accented characters. I found a few options to do that (here's one 扩展)。

这是服务器端的,例如:

// 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 中的一个选项激活。