php Smarty模板大括号

本文介绍了在使用Smarty模板引擎时遇到的大括号问题及四种解决方案:利用内置变量、文本转义、修改默认定界符及加空格的方法,帮助开发者有效避免因大括号引起的解析错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Smarty 模板的时候,通常都是用 ‘{’ 和 ‘}’ 作为定界符(delimiter)。
有时,我们需要在 html 代码里输出大括号,如果在模板里直接写出来,会被 Smarty 的解析器认为是定界符,然后会报错:
Smarty error : syntax error: unrecognized tag
无法识别的标签!
如何解决呢?

1 内置变量

在需要使用定界符的时候,可以通过 {ldelim},{rdelim}标签,或者 {$smarty.ldelim},{$smarty.rdelim}的变量来使用。

2 文本转义

我们经常会在 html 里写 javascript 函数,就不可避免地写大量的大括号,这个时候上面的解决方法就不适用了,Smarty 提供了一个转义一段代码的标签:{literal}…{/literal}
{literal}

function sayHello() {alert('Hello World!')}

{/literal}

3 修改默认定界符

<?php

$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';

$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');

?>

Smarty的默认定界符{ 和 }可以整齐地界定一般内容的显示。 然而你可以通过修改Smarty的 $left_delimiter 和 $right_delimiter 的变量值,设置更适合的定界符。
修改定界符会影响到全部模板代码和解析,请确保在修改前已清除了全部的缓存和编译文件。

4 加空格

在Smarty 3的模板中,如果‘{’和‘}’大括号里包含有空格,那么整个{}内容会被忽略,当然我们可以设置Smarty类变量$auto_literal=false来取消这种规则。【经测试,只要 { 后面有空格,就不会被解析】

参考:

Smarty 定界符 花括号 大括号 函数定义 转义
http://blog.youkuaiyun.com/sunlylorn/article/details/6319556

忽略Smarty解析
https://book.2cto.com/201305/22650.html

避免Smarty解析
https://www.smarty.net/docs/zh_CN/language.escaping.tpl

在php模板引擎smarty下输出大括号
http://blog.youkuaiyun.com/skfzc/article/details/48341375

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值