这会有什么副作用吗


will this have any side effect?

我想在不触发任何新的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,你必须注意文本编码。