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

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

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

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

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


当前回答

如果你使用模板引擎来构建你的HTML,那么你可以用任何你想要的东西来填充它!

查看XTemplates。 它是一个很好的、开源的、轻量级的模板引擎。

你的HTML/JS看起来是这样的:

<script>
    var myvar = {$MyVarValue};
</script>

其他回答

您可以将它插入一个隐藏的DIV中,然后将DIV的innerHTML分配给JavaScript变量。你不用担心会逃掉任何东西。只是要确保不要把坏的HTML放在那里。

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

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

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

Micah的解决方案如下工作为我的网站,我必须自定义不是在UTF-8,所以我不能使用json;我也想投票,但我的声望不够高。

function escapeJavaScriptText($string) 
{ 
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); 
} 
<script>
var myVar = <?php echo json_encode($myVarValue); ?>;
</script>

or

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

你可以试试

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