thinkphp5.1模板输出变量最基础方式是{$变量名},默认经htmlentities()转义防xss;数组支持{$user.name}或{$user['name']};系统变量用{$think.server.xxx}等直接调用;json/富文本等需加|raw且须前置安全过滤。

ThinkPHP5.1模板中输出变量最基础的方式是用{$变量名},但背后有默认转义机制,稍不注意就出错或埋下XSS风险。
普通字符串和数组变量怎么输出
控制器里赋值:
$this->assign('username', '张三');$this->assign('user', ['name' => '李四', 'age' => 28]);-
$this->assign(['city' => '杭州', 'code' => '0571']);(批量赋值)
模板中直接写:
-
{$username}→ 输出“张三” -
{$user.name}或{$user['name']}→ 输出“李四” -
{$city}:{$code}→ 输出“杭州:0571”
系统变量和配置项怎么取
不用提前assign,直接调用内置变量:
- 服务器信息:
{$Think.server.HTTP_USER_AGENT} - GET参数:
{$Think.get.id}(等价于$_GET['id']) - Session数据:
{$Think.session.user_id} - 配置项:
{$Think.config.app_debug}(读取config/app.php中的app_debug) - 常量:
{$Think.const.PHP_OS}
什么时候必须加|raw
默认会走htmlentities(),所以以下场景不加|raw就会乱码或报错:
- JSON 数据:
{:json_encode($data)|raw} - 内联 JS 变量:
<script>var info = {:json_encode($info)|raw};</script> - 富文本内容:
{$article.content|raw}(前提是已用HTMLPurifier等做过安全过滤) - 分页 HTML:
{$list|raw}($list是Paginator对象)
常见错误提醒
这些写法看着像,但实际无效或危险:
-
{ $name}——{和$之间有空格,标签不解析,原样输出 -
{$name|htmlspecialchars}—— 默认已转义,再套一层会把"变成",JS/JSON直接崩 - 全局设
'default_filter' => 'htmlspecialchars'—— 所有变量无差别处理,JSON、URL、属性值全被破坏 - 直接输出用户提交的HTML:
{$content}—— 危险!必须先净化再|raw
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











