在Smarty中,有没有标准函数或从数组生成json的简单方法,就像json_encode()在php中一样?实际上似乎没有聪明的文档,但无论如何都想问。
谢谢, 思南。
答案 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'
转义并将 '"'
替换为 "
:
{literal}const my_javascript_array = JSON.parse(`{/literal}{json_encode($myarray)|escape:'javascript'}{literal}`.replaceAll('"', '"'));
这有点令人费解,但你会感谢自己学习这个技巧:)