将PHP字符串编码输出到JavaScript变量的最简单方法是什么?

我有一个PHP字符串,其中包括引号和换行。我需要将这个字符串的内容放入一个JavaScript变量中。

通常,我只会在一个PHP文件中构造我的JavaScript, à la:

<script>
  var myvar = "<?php echo $myVarValue;?>";
</script>

但是,当$myVarValue包含引号或换行符时,这就不起作用了。


当前回答

不喜欢。使用Ajax,把它放在HTML中的data-*属性中,或者其他有意义的东西中。使用内联脚本使您的页面更大,可能是不安全的或仍然允许用户破坏布局,除非… 你做了一个更安全的函数: 函数inline_json_encode($obj) { 返回(“< !大小写不敏感——”、“< \ !——“json_encode (obj美元)); }

其他回答

不要通过addslashes()运行它;如果你在HTML页面的上下文中,HTML解析器仍然可以看到</script>标签,甚至在字符串中间,并假设它是JavaScript的结束:

<?php
    $value = 'XXX</script><script>alert(document.cookie);</script>';
?>

<script type="text/javascript">
    var foo = <?= json_encode($value) ?>; // Use this
    var foo = '<?= addslashes($value) ?>'; // Avoid, allows XSS!
</script>

扩展别人的回答:

<script>
  var myvar = <?php echo json_encode($myVarValue); ?>;
</script>

使用json_encode()需要:

PHP 5.2.0或更高版本 $myVarValue编码为UTF-8(当然也可以是US-ASCII)

由于UTF-8支持完整的Unicode,因此动态转换应该是安全的。

注意,因为json_encode转义正斜杠,即使包含</script>的字符串也会被安全转义,以便使用脚本块打印。

<script>
var myVar = <?php echo json_encode($myVarValue); ?>;
</script>

or

<script>
var myVar = <?= json_encode($myVarValue) ?>;
</script>

我不确定这是否是不好的做法,但我和我的团队一直在使用混合的html、JS和php解决方案。我们从想要拉入JS变量的PHP字符串开始,让我们称之为:

$someString

接下来我们使用页面内的隐藏表单元素,并将它们的值设置为字符串:

<form id="pagePhpVars" method="post">
<input type="hidden" name="phpString1" id="phpString1" value="'.$someString.'" />
</form>

然后通过document.getElementById定义一个JS变量就很简单了:

<script type="text/javascript" charset="UTF-8">
    var moonUnitAlpha = document.getElementById('phpString1').value;
</script>

现在你可以在任何你想获取PHP字符串值的地方使用JS变量“moonUnitAlpha”。 这对我们来说似乎很有效。我们来看看它能不能大量使用。