原样输出 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;- 块内既然不解析,也就无法使用任何标签与变量——需要动态值时请拆块。