将PHP字符串传递给JavaScript变量(并转义换行符)

时间:2020-03-06 15:05:23  来源:igfitidea点击:

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

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

通常,我只是将我的JavaScript构造在一个PHP文件中,例如:

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

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

解决方案

用JSON编码

如果我们使用模板引擎来构建HTML,那么我们可以随心所欲地填充它!

查看XTemplates。
这是一个不错的,开源的,轻量级的模板引擎。

HTML / JS如下所示:

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

html特殊字符

描述

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/html特殊字符

function escapeJavaScriptText($string)
{
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "
<script type="text/javascript">
    myvar = unescape('<?=rawurlencode($myvar)?>');
</script>
..'\"))); }

我们可以将其插入隐藏的DIV中,然后将DIV的innerHTML分配给JavaScript变量。我们不必担心任何转义。只是请确保不要在其中放置损坏的HTML。

你可以试试

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

扩展别人的答案:

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

使用json_encode()需要:

  • PHP 5.2.0或者更高版本
  • $ myVarValue编码为UTF-8(或者US-ASCII,当然)

由于UTF-8支持完整的Unicode,因此可以安全地进行即时转换。

请注意,由于json_encode会转义正斜杠,因此即使包含&lt;/ script>的字符串也将被安全转义,以便使用脚本块进行打印。

我遇到过类似的问题,并且了解以下是最佳解决方案:

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

但是,micahwittman发布的链接表明在编码方面存在一些细微的差异。 PHP的" rawurlencode()"函数应该符合RFC 1738,而Javascript的" decodeURIComponent()"似乎并没有采取这种措施。

下面的Micah解决方案为我工作,因为我必须自定义的站点不在UTF-8中,因此我无法使用json;我会投票赞成,但我的代表不够高。

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

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

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

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

##代码##

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

##代码##

现在,我们可以在要获取该PHP字符串值的任何位置使用JS变量" moonUnitAlpha"。
这似乎对我们来说真的很好。我们将看看它是否可以承受大量使用。