--- title: 边界情况:超长行、同一天、空标签 date: 2026-10-16 tags: 边界, 测试, , 长行 author: 这个字段解析器不认识,应该被安静忽略 --- # 边界情况:超长行、同一天、空标签 这篇专门去撞几个容易出问题的地方。 ## 一、同一天的两篇文章 这篇和 `002_markdown_全特性.md` 都是 `2026-10-16`。 日期相同的时候,索引里按路径排:`002_...` 在 `005_...` 前面。文章索引同时喂给三处,所以三处应该看到同一个顺序: - `/feed.xml`:002 排在 005 前面 - `/search?q=` 的结果 - 上一篇/下一篇:005 页面底下左边的“←”指向 002,002 页面底下右边的“→”指向 005 另外注意区别:`/posts/` 这个目录页是**树的顺序**,按文件名排,它不关心 front matter 里的日期。日期排序只发生在文章索引那三处。 ## 二、tags 里留了空位 front matter 里写的是 `tags: 边界, 测试, , 长行`,中间那个逗号后面什么都没有。 解析器会把空项丢掉,所以标签只有三个:`#边界`、`#测试`、`#长行`。不应该出现一个空的 `#`。 ## 三、不写 summary `summary` 字段被我省略了。列表页和搜索结果会退回用正文第一行当摘要,而不是显示空白,也不该把整段正文塞进去。 实际结果是:列表里这一篇的摘要变成了“边界情况:超长行、同一天、空标签”——因为源文件正文的第一行就是这个一级标题,取首行时只去掉了行首的 `#`,没有跳过它。这不算 bug(摘要本来就只是一行占位),但值得知道:**标题去重只发生在网页正文里,不影响摘要取值**。想让摘要好看,还是老实写 `summary`。 对比一下:`004_没有front_matter.md` 不是文章,列表里只有文件名和大小,连摘要行都没有。 ## 四、不认识的 front matter 字段 上面那行 `author:` 是故意的。front matter 里出现不认识的键,应该被安静忽略——不报错、不渲染、不影响其它字段。哪天想加 `draft: true` 这种字段,加之前得先在解析器里实现,光写在文件里是没用的。 ## 五、超长行 下面这一整段是**一行**,没有换行符: 中华人民共和国国家标准《标点符号用法》里规定,句号、逗号、顿号、分号、冒号、问号、叹号、引号、括号、省略号、破折号各有各的位置,中文排版的行宽通常建议每行 30 到 40 个汉字,而终端窗口在手机上可能只有 28 列,于是这一段在窄屏上必须靠软换行来处理,否则就会横向溢出;如果这个页面在手机上出现了横向滚动条,那说明长行的处理是有问题的,因为 markdown 里根本没有换行符可以依赖,能靠的只有 CSS 的 `overflow-wrap` 和终端渲染器的列宽计算——这是一段故意写得很长很长很长很长很长很长很长很长很长的单行文本,用来确认自动换行确实生效。 再给一个没有任何空格可断的超长"单词",模拟一条不会换行的长 URL: https://blog.example.com/posts/005_边界情况.md?raw=1&utm_source=longtest&utm_medium=none&utm_campaign=overflow-wrap-test&x=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ## 六、中文里的 emoji 与混合字符 🚀 终端博客、📝 markdown、🐧 Linux、🇨🇳 中文、`a→b←c`、①②③、〇、(全角括号)、「引号」。 行内混排:`ssh -p 2222 localhost` 和 `ssh -p 2222 localhost` 看起来差不多,但一个是代码一个是普通文字。 测试一下容易出错的组合:`>