如何确保 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
中的一个选项激活。
标题说明了一切。向页面或图像添加标题时,如果该标题带有重音字符,则会反映在 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
中的一个选项激活。