You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Smarty 3.1.32字符串模板变量不渲染问题求助

问题根源:PHP双引号字符串的自动变量解析

你的问题出在PHP双引号字符串的自动变量解析上!

看你的代码:

$template = "<h1>Hello {name},</h1>";

在PHP中,双引号包裹的字符串里,{name}会被当作变量$name来解析——而你当前代码里并没有定义$name变量,所以PHP会把{name}替换成空字符串。最终传递给Smarty的模板内容其实是<h1>Hello ,</h1>,根本就没有{name}这个Smarty变量标记,自然无法被渲染。

解决方案

有三种简单的修复方式:

  • 使用单引号包裹模板字符串
    单引号里的内容不会被PHP解析,能完整保留{name}标记:

    $template = '<h1>Hello {name},</h1>';
    $smarty->assign('name','Christian');
    $output = $smarty->fetch('string:' . $template);
    echo $output;
    
  • 在双引号中转义{和}
    用反斜杠转义分隔符,避免PHP解析:

    $template = "<h1>Hello \{name\},</h1>";
    
  • 使用NOWDOC语法(PHP 5.3+)
    这种写法和单引号类似,但更适合多行模板:

    $template = <<<'EOT'
    &lt;h1&gt;Hello {name},&lt;/h1&gt;
    EOT;
    

这样修改后,Smarty就能拿到包含{name}的完整模板字符串,正常渲染变量了。

内容的提问来源于stack exchange,提问作者wwl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:32:02