如何用 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'
转义并将'&quot;'
替换为"
:
literalconst my_javascript_array = JSON.parse(`/literaljson_encode($myarray)|escape:'javascript'literal`.replaceAll('"', '"'));
这有点令人费解,但你会感谢自己学会了这个技巧:)
【讨论】:
以上是关于如何用 smarty 生成 json?的主要内容,如果未能解决你的问题,请参考以下文章