我想在不触发任何新的http请求的情况下将PHP变量传递给Javascript(也就是说:直接将其插入标记中)。但我希望内容保持原样(没有任何可能更改我的值的净化,即使它们在标记本身的位置)。我当然也想保证它的安全。
到目前为止,我提出的最好的方法包括json+base64_encode+data-uri方案:
<script type="text/javascript" src="data:text/javascript;base64,<?php echo base64_encode('var thing = '.json_encode($thing)); ?>"></script>
我的问题是:这会有任何副作用吗?我能安全地使用这个吗?
我当然不会这么做。您引入了不必要的兼容性问题(IE)。通过base64编码,您将JSON的大小增加约37%。
<script type="text/javascript">var thing = <?php echo json_encode($thing); ?></script>
实际上,您可能遇到的唯一问题是(看起来$thing
在某个字符串中是否有"</script>
"json_encode()
实际上转义了所有正向斜杠/
,所以这不是问题。)HTML解析器将忽略任何其他看起来像<script>
块中标记的内容。
如果你的页面不是UTF-8,你必须注意文本编码。