如何用 smarty 生成 json?

Posted

技术标签:

【中文标题】如何用 smarty 生成 json?【英文标题】:Howto generate json with smarty? 【发布时间】:2010-11-20 02:35:29 【问题描述】:

在 Smarty 中,是否有标准函数或简单方法从数组生成 json,就像 json_encode()php 中所做的那样?

我在 Smarty 文档中看不到,想在这里问。

【问题讨论】:

Smarty 毕竟被翻译成 PHP ......所以为什么不省一步,对吧? :) @Al,评论已标记,要求是由我们工作的公司设定的,而不是像我们这样的凡人。处理像你这样的 cmets 比那些要求更糟糕。干杯。 【参考方案1】:

这应该可行。 @ 使 smarty 对整个数组运行修饰符,否则它对每个元素都执行此操作。

$myarray|@json_encode

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

$myarray|@json_encode nofilter

【讨论】:

我不知道@修饰符!这回答了这个问题。 请注意,要传递参数,您需要数值。即,JSON_UNESCAPED_SLASHES 是 64。因此,$myarray|@json_encode:64 nofilter 将使斜杠不被转义。 ***.com/a/27806269/2418655 这节省了我的一天:)【参考方案2】:

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

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

$myarray|@json_encode nofilter

【讨论】:

这仅适用于您的 Smarty 类将 $escape_html 设置为 true 的情况。我的意思是,如果你做对了,应该是这样,但仍然如此。【参考方案3】:

您必须在您的 php 代码中使用 json_encode() 然后将值分配给 smarty 使用 $smarty->assign() 函数。之后,您必须使用解析模板文件中的该值 javascript。

代码sn-p:

literal
<script>
var json = JSON.parse('/literal$your_json_encoded_arrayliteral');
//another statement
</script>
/literal

【讨论】:

【参考方案4】:
literal
<script type="text/javascript">
<!--
var newVar =/literal$myarray|@json_encode nofilter;literal
// -->
</script>
/literal

我的解决方案

【讨论】:

【参考方案5】:

我不知道。您可以使用 $smarty->assign( ... ) 将 json_encode() 的结果分配给“php 代码”中的 smarty 变量,然后在模板中使用它。

还有一个 Smarty extension 用于 json_decode()。在此基础上为相反的情况编写自己的扩展应该不难。

【讨论】:

我以为会有像 $var|json_encode 这样的方法,谢谢。【参考方案6】:

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

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

literalconst my_javascript_array = JSON.parse(`/literaljson_encode($myarray)|escape:'javascript'literal`.replaceAll('&quot;', '"'));

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

【讨论】:

以上是关于如何用 smarty 生成 json?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Smarty 解码 json 文件

smarty 快速入门

smarty 快速入门

smarty模板技术

使用smarty需要修改php配置么

Smarty的分页实现