原样输出 Literal

原样输出 Literal

{literal} 块内的内容原样输出,不做任何模板解析,专门用于保护 JavaScript / CSS 中大量的 { }(否则会被引擎当成标签定界符)。

一、语法

{literal}
    ...
{/literal}

二、示例

{literal}
<script>
    if (a > 0) { console.log("ok"); }
    var obj = { name: "douphp", ver: 1 };
</script>
<style>
    .box { color: red; margin: 0 auto; }
</style>
{/literal}

块内的 {、}、$、{$...} 都按字面输出,不会被解析为变量或标签。

三、实现机制

Lexer 在遇到 {literal} 时进入保护区,直到 {/literal} 结束,中间文本作为一个 LITERAL 节点整体保留。LiteralTagCompiler 把它编译为一条 echo '...'(对单引号与反斜杠做转义),因此块内内容原样进入输出。

四、与 {ldelim}/{rdelim} 的取舍

  • 整段都不需要模板变量 → 用 {literal} 包裹,最省心;
  • 段落里需要混入个别变量 → 用 {ldelim} / {rdelim} 逐字输出定界符,或把 {literal} 拆开、变量部分留在块外(见「定界符 Delimiters」篇)。
{* 拆开 literal,中间插入变量 *}
{literal}<script>var a = { x: 1 };{/literal}
<script>var ver = "{$douview.version}";</script>

五、注意事项

  • {literal} 必须成对闭合,否则编译期报 mismatched tag;
  • 块内既然不解析,也就无法使用任何标签与变量——需要动态值时请拆块。
添加日期: