如何用smarty生成json?

时间:2009-08-16 22:37:44

标签: php smarty json

在Smarty中,有没有标准函数或从数组生成json的简单方法,就像json_encode()在php中一样?实际上似乎没有聪明的文档,但无论如何都想问。

谢谢, 思南。

6 个答案:

答案 0 :(得分:72)

这应该有效。 @使smarty对整个数组运行修饰符,否则它会为每个元素运行。

{$myarray|@json_encode}

如果启用了$escape_html,则需要使用nofilter

{$myarray|@json_encode nofilter}

答案 1 :(得分:10)

虽然{$myarray|@json_encode}确实发出了以json编码的数组,但它也会转义特殊字符,使得数组在javascript中无法使用。

为了避免转义特殊字符并且还能够在javascript中使用数组,请使用nofilter标志:

{$myarray|@json_encode nofilter}

答案 2 :(得分:4)

你必须在你的PHP代码中使用json_encode()然后使用值将值赋值给smarty $smarty->assign()功能。之后你必须使用你的模板文件解析该值 的JavaScript。

代码段:

{literal}
<script>
var json = JSON.parse('{/literal}{$urarray}{literal}');
//another statments
</script>
{/literal}

答案 3 :(得分:1)

{literal}
<script type="text/javascript">
<!--
var newVar ={/literal}{$myarray|@json_encode nofilter};{literal}
// -->
</script>
{/literal}

我的解决方案

答案 4 :(得分:0)

我不知道。您可以使用$ smarty-&gt; assign(...)将json_encode()的结果分配给'php code'中的smarty变量,然后在模板中使用它。

还有一个用于json_decode()的Smarty extension。基于此,为反面编写自己的扩展并不难。

答案 5 :(得分:0)

虽然 {$myarray|@json_encode nofilter} 可以工作,但这里存在一个安全漏洞,因为我们正在进行变量转义。非常不鼓励变量转义(通过 nofilter),因为可以轻松显示和执行恶意代码。

还有另一种方法可以考虑,使用 'javascript' 转义并将 '&quot;' 替换为 "

{literal}const my_javascript_array = JSON.parse(`{/literal}{json_encode($myarray)|escape:'javascript'}{literal}`.replaceAll('&quot;', '"'));

这有点令人费解,但你会感谢自己学习这个技巧:)