apostrophe-cms - 如何确保 slug 不包含重音字符?
问题描述
标题说明了一切。向页面或图像添加标题时,如果该标题包含重音字符,则会反映在 URL 中。例如,标题为“Événements”的作品将生成一个 slug“événements”。
虽然我同意这是有效的,并且它在浏览器的引擎盖下一次转换为 % 字符(例如“%C3%A9v%C3%A9nement”),但这不是当前项目所期望的。
有没有办法在更新 slug 时捕捉到,并选择用我们选择的任何等价物手动替换重音字符?目前我们正在手动纠正这些蛞蝓,显然有些人会从裂缝中溜走。
解决方案
这些是通过实用程序方法中的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
.
推荐阅读
- angular - 如何直接从 formControl 获取验证器?
- android - 如何在H264上接听电话和丢失包时修复黑屏
- vba - 过滤和计算 3 列之间的匹配项
- html - 在 Angular Material Web 应用的单个页面上显示普通 HTML 元素
- c++ - 如何在 C++ 中使用 unordered_maps 的 unordered_map?
- python - ARIMA Forecast: Cannot cast ufunc subtract output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
- angular - Angular 2+ 如何使用变量值来调用指令?
- acumatica - UseLegacyUI 设置不起作用
- python - 在列表列表中查找出现在两个列表中的元素
- linux - 如何获取当前文件夹名称并从bash中的名称中删除字符