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

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

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

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

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


当前回答

htmlspecialchars

描述

string htmlspecialchars ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] )

某些字符在HTML中有特殊的意义,如果要保留它们的含义,就应该用HTML实体来表示。这个函数返回一个包含这些转换的字符串;所做的翻译是那些对日常web编程最有用的。如果需要翻译所有HTML字符实体,请使用htmlentities()。

此函数在防止用户提供的文本包含HTML标记时非常有用,例如在留言板或留言簿应用程序中。

所执行的翻译是:

* '&' (ampersand) becomes '&amp;'
* '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
* '<' (less than) becomes '&lt;'
* '>' (greater than) becomes '&gt;'

http://ca.php.net/htmlspecialchars

其他回答

<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”。 这对我们来说似乎很有效。我们来看看它能不能大量使用。

htmlspecialchars

描述

string htmlspecialchars ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] )

某些字符在HTML中有特殊的意义,如果要保留它们的含义,就应该用HTML实体来表示。这个函数返回一个包含这些转换的字符串;所做的翻译是那些对日常web编程最有用的。如果需要翻译所有HTML字符实体,请使用htmlentities()。

此函数在防止用户提供的文本包含HTML标记时非常有用,例如在留言板或留言簿应用程序中。

所执行的翻译是:

* '&' (ampersand) becomes '&amp;'
* '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
* '<' (less than) becomes '&lt;'
* '>' (greater than) becomes '&gt;'

http://ca.php.net/htmlspecialchars

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

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

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

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

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

function escapeJavaScriptText($string) 
{ 
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); 
}