应选用后端模板引擎原生语法(如jinja2的{{user.name}}、thymeleaf的th:text),避免与vue/react冲突;混用时改用__user_name__等vue不识别格式;严格隔离挂载区域,确保后端占位符不被前端解析。

HTML模板里怎么写占位符才不被前端框架劫持
后端渲染的HTML模板,如果直接用 {{name}} 或 {% name %} 这类占位符,很容易和 Vue、React、Django 模板语法冲突,导致页面空白或报错。关键不是“能不能用”,而是“用哪种占位符能让后端安全吐出、前端又不误解析”。
- 优先选后端模板引擎原生支持的语法:比如 Jinja2 用
{{ user.name }},Thymeleaf 用<span th:text="${user.name}">placeholder</span>,不要自己造[[name]]—— 后端没配转义规则时,这种自定义写法反而更易出错 - 如果必须混用前端框架(如 Vue),把后端占位符改成 Vue 不识别的格式:比如用
__USER_NAME__(下划线+大写+双下划线),再在后端替换时做严格字符串替换,避免正则误伤 - 禁用前端框架的自动挂载区域:Vue 实例只挂载
#app,那后端渲染的静态区块就别包进#app;否则 Vue 会尝试编译里面所有花括号,包括你本意是留给后端填的{{title}}
Node.js + EJS 模板里 render() 传参结构不对会丢数据
EJS 的 res.render() 看似简单,但参数顺序和嵌套层级错一点, 就直接报 ReferenceError: title is not defined。
-
res.render('page', { user: { name: 'Alice' }, title: '首页' })→ 模板里用和,不能写成(除非你手动包了一层data) - 如果后端传的是扁平化对象,但模板里写了嵌套访问,比如传了
{ userName: 'Bob' }却写,EJS 不会自动映射,直接报错 - 开发时加个兜底:在 EJS 里用
,避免上线后因某字段缺失整页崩溃
PHP Smarty 模板中 {literal} 不是万能解药
遇到 JS 代码里有 {$var},想用 {literal} 包住 JS 块?小心——{literal} 只停用 Smarty 解析,但不会阻止 PHP 输出时的 HTML 实体编码,比如 <script></script> 可能被双重转义成 <script>。
- 真正要混 JS 逻辑,优先用
{ldelim}/{rdelim}输出单个花括号,比如var x = {ldelim}a: 1{rdelim}; - 如果 JS 里真要插 PHP 变量,用
{'$smarty.session.user'|escape:'javascript'}显式转义,而不是裸写{$smarty.session.user}—— 否则 XSS 风险和引号断裂同时发生 -
{literal}块内不能嵌套其他 Smarty 标签,也不能跨行写错位置(比如换行符卡在{/literal}中间),会导致模板编译失败,错误信息常是Unexpected "}"
Java Thymeleaf 的 th:utext 和 th:text 差一个字符,结果天壤之别
后端传了带 HTML 标签的富文本字段,比如 content = "<strong>重点</strong>",用 th:text="${content}" 渲染出来就是纯文本 <strong>重点</strong>;而 th:utext 才会真的输出加粗效果。但后者也意味着:XSS 风险完全甩给后端过滤逻辑扛。
- 永远优先用
th:text,除非业务明确要求支持 HTML;哪怕只是换行,也该用 CSSwhite-space: pre-line+th:text,而不是放行utext - 如果非用
th:utext,后端必须调用Jsoup.clean(content, safelist)过滤,不能只靠前端th:utext自动处理 - Thymeleaf 3 默认关闭表达式内联(
[[${...}]]),如果模板里写了[[${content}]]却没开配置,它会原样输出字符串,而不是执行表达式——这个开关叫spring.thymeleaf.enabled-expr-inline(Spring Boot 2.x)或spring.thymeleaf.expression-inlining-enabled(3.x)
最麻烦的不是语法记不住,而是不同环境模板引擎版本不一致,比如 Thymeleaf 2.1 和 3.0 对 th:fragment 的作用域处理完全不同,本地跑得通,上线就丢变量。上线前务必确认运行时版本和开发文档对得上。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











