这会有副作用吗?

时间:2012-02-25 21:44:13

标签: php javascript json

我想将PHP变量传递给Javascript而不会触发任何新的http请求(也就是说:直接在标记中插入)。但我希望内容按原样(没有任何可以改变我的值的清理,即使它们在标记本身的位置)。当然我也希望保持安全。

我到目前为止最好的方法包括json + base64_encode +数据uri方案:

<script type="text/javascript" src="data:text/javascript;base64,<?php echo base64_encode('var thing = '.json_encode($thing)); ?>"></script>

我的问题是:这会有副作用吗?我能安全地使用它吗?

1 个答案:

答案 0 :(得分:2)

我当然不会这样做。您正在引入不必要的兼容性问题(IE)。通过base64编码,您的JSON大小增加了~37%

<script type="text/javascript">var thing = <?php echo json_encode($thing); ?></script>

实际上,您可能遇到的唯一问题是$thing在某个字符串中是否有“</script>”。 (看起来像{{ 1}}实际上转义了所有正斜杠json_encode(),所以这不是问题。) HTML解析器将忽略/块中可能看起来像标记的任何其他内容。

如果您的网页不是UTF-8,则必须注意文本编码。