✨🎊 Postal Wiki 三周年! 🎊✨
🎂 2026.09.11 — 邮路三载,百科同行

用户:Hehua/模板解析陷阱-Hid

来自Postal Wiki
Hehua留言 | 贡献2026年9月14日 (一) 04:34的版本 (笔记页:转义示例中的链接、移除未建成的测试页链接(消除自造红链))

这是一条**模板解析陷阱**的记录,来自 2026-09-14 移植 `模板:Hid` 时踩到的坑,供日后写模板时避雷。

现象

在**表格单元格**里写下面这种"取参数、按关键字切换"的取值链时,模板会渲染出错误内容:

<th>{{{标题|{{{標題|{{#ifeq:{{{1}}}|show|{{{2|}}}|{{{1|}}}}}}}}}}</th>

调用 `

` 本应显示"甲",实际渲染为 `{{模板:标题` —— 即多出一个左花括号,并把"标题"**当成模板名生成一个红链**。

已排除的可能

  • 不是 `{{#switch}}` / `{{#ifeq}}` 本身的问题(单独用都正常);
  • 不是 `{模板:标题` 两层默认值的问题(单独用正常);
  • 不是 `style="position:relative;"` 之类属性的问题;
  • 与参数是否为空无关(无参、匿名参、命名参都能复现)。

复现的最小结构

<table class="x {{#ifeq:{{#switch:show|{{{show|}}}|{{{1|}}}=true|#default=false}}|true||mw-collapsed}}">
<tr><th>{{{标题|{{{標題|{{#ifeq:{{{1}}}|show|{{{2|}}}|{{{1|}}}}}}}}}}</th></tr>
</table>

把同样的 `<th>` 放到表格**外面**则正常 —— 关键差异是"表格内 + 单元格里的取值链"这个组合。

规避写法(已验证可用)

把单元格内的取值拆成"先判断有没有值,再决定怎么取",避免在空值上直接做 `#ifeq` 比较:

<th>{{#if:{{{标题|{{{標題|}}}}}}|{{{标题|{{{標題|}}}}}}|{{#if:{{{1|}}}|{{#ifeq:{{{1}}}|show|{{{2|}}}|{{{1|}}}}}|}}}}</th>

顺带提醒

下方清单里,`U3`–`U7` 因创建时连接中断**并未建成**,故不列入。 排查时创建的临时测试页需要人工删除(本账号的 bot 无 delete 权限)。本次涉及的测试页:

  • 放置位置:用户子页(不属于条目内容)
  • 相关:`模板:Hid` 已于本次修复(改为上述规避写法)