
在 Pug 中,普通文本块内无需转义 (、>、& 等 HTML 特殊字符——只要它们不构成标签或表达式,Pug 会原样输出为文本内容。
在 pug 中,普通文本块内无需转义 `(`、`>`、`&` 等 html 特殊字符——只要它们不构成标签或表达式,pug 会原样输出为文本内容。
Pug 的设计哲学是「默认安全、按需解析」:只有当文本出现在可能被解释为标签、属性、插值或过滤器的位置时,才需要考虑转义;而在纯文本上下文(如 p. 块或标签内联文本)中,(、)、>、&、[、] 等均被视为普通字符,无需且不应使用 !{} 或 #[...] 等插值语法强行“逃逸”——这反而会触发解析错误,因为 !{(} 被视为非法插值表达式(括号未闭合、无有效 JS 表达式)。
✅ 正确写法(推荐):
// 方式一:内联文本(简洁、语义清晰) p (Edit > Preferences > Media & Lorem Ipsum) // 方式二:点号块(适合多行或含缩进的纯文本) p. (Edit > Preferences > Media & Lorem Ipsum)
编译后均生成标准 HTML:
<p>(Edit > Preferences > Media & Lorem Ipsum)</p>
注意:Pug 会自动对 > 和 & 进行 HTML 实体编码(即转为 > 和 &),确保浏览器正确渲染且符合 HTML 规范——这是内置的安全行为,无需手动干预。
❌ 错误尝试(导致语法错误):
// ❌ 错误:!{(} 不是合法插值,Pug 解析器报错 "Unexpected token"
p. !{(} Edit !{>} Preferences !{&}
// ❌ 错误:#[!] 是无效的标签嵌套语法,且 `!` 后缺少合法元素
p #[!(] Edit #[!>] Preferences⚠️ 注意事项:
- 若文本中混有 HTML 标签或需动态插入变量,才应使用
!=(非转义输出)或=(转义输出)+ 插值,例如:p= 'Edit > Preferences > Media & ' + appName
- 若项目中上述写法仍报错,请检查 Pug 版本(v3+ 已移除 Jade 兼容模式)、
.pugrc配置或构建工具(如 Webpack 的pug-loader)是否启用了非标准解析选项——此时需提供具体错误信息另行排查。
总结:Pug 对纯文本极其友好,优先使用自然书写;转义是例外,而非惯例。保持代码简洁、语义明确,才是高效使用 Pug 的关键。

















