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

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

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

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

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


当前回答

我曾经遇到过类似的问题,我认为以下是最好的解决方案:

<script>
    var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>

然而,micahwittman发布的链接表明存在一些小的编码差异。PHP的rawurlencode()函数应该符合RFC 1738,而Javascript的decodeURIComponent()似乎没有这样的努力。

其他回答

扩展别人的回答:

<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>

我曾经遇到过类似的问题,我认为以下是最好的解决方案:

<script>
    var myvar = decodeURIComponent("<?php echo rawurlencode($myVarValue); ?>");
</script>

然而,micahwittman发布的链接表明存在一些小的编码差异。PHP的rawurlencode()函数应该符合RFC 1738,而Javascript的decodeURIComponent()似乎没有这样的努力。

你可以试试

<script type="text/javascript">
    myvar = unescape('<?=rawurlencode($myvar)?>');
</script>