我想将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>
我的问题是:这会有副作用吗?我能安全地使用它吗?
答案 0 :(得分:2)
我当然不会这样做。您正在引入不必要的兼容性问题(IE)。通过base64编码,您的JSON大小增加了~37%。
<script type="text/javascript">var thing = <?php echo json_encode($thing); ?></script>
实际上,您可能遇到的唯一问题是 (看起来像{{ 1}}实际上转义了所有正斜杠$thing
在某个字符串中是否有“</script>
”。json_encode()
,所以这不是问题。) HTML解析器将忽略/
块中可能看起来像标记的任何其他内容。
如果您的网页不是UTF-8,则必须注意文本编码。