Jekyll文章标题的合法文件名规则及特殊字符处理咨询
Jekyll文章标题/文件名的字符限制及处理方案
一、需要避免的字符(及原因)
Jekyll的文章文件名会默认用来生成页面URL(除非手动指定permalink),同时还要兼容操作系统的文件名规则,以下字符必须避免:
- URL保留/特殊字符:
#、?、&、%、/、\、:、*、<、>、|、"- 比如
#会被浏览器识别为锚点,导致URL路径被截断;?会触发URL参数解析,Jekyll生成的页面路径会被错误识别,最终出现404。
- 比如
- 跨平台文件名冲突字符:Windows系统禁止的
:、*、?、<、>、|、"、\,即使Linux/macOS允许,也建议统一避免,保证脚本在不同环境下都能正常工作。
二、Jekyll对非法字符的默认处理
Jekyll本身不会主动过滤或转义这些非法字符,它仍会发布包含这些字符的文件,但生成的URL会直接包含这些字符,导致浏览器无法正确解析,用户访问时会出现路径错误或404页面。
三、合法文件名但非法URL字符的处理方法
1. 手动指定permalink
在文章的front matter中添加permalink字段,直接定义合法的URL路径,和文件名无关:
--- title: "#我的文章标题" permalink: /2022/10/09/my-post/ ---
这样即使文件名包含非法字符,生成的URL也是完全合法的。
2. 脚本自动处理文件名
在你的发布脚本中,提前对原标题做字符替换:
- 将
#、?等非法字符替换为-或直接移除; - 保留原标题到文章的front matter的
title字段中,确保页面显示的标题正确。
比如原标题是#Post?标题,脚本生成的文件名为2022-10-09-my-post-title.md,同时在front matter里写title: "#Post?标题"。
3. 使用Jekyll的slugify过滤器
在模板或permalink配置中,利用Jekyll内置的slugify过滤器自动生成合法的URL路径:
- 配置全局permalink规则(在
_config.yml中):
permalink: /:year/:month/:day/:title:output_ext
然后模板里生成链接时用:
<a href="{{ post.url | slugify }}">{{ post.title }}</a>
slugify会自动将特殊字符移除、空格转成-,生成符合URL规范的路径。
内容的提问来源于stack exchange,提问作者Start-Automating
相关产品推荐
相关产品推荐

