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

2020/09/29 11:41 · javascript ·  · 0评论

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

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

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

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

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

扩展别人的答案:

<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>将被安全转义,以便使用脚本块进行打印。

用JSON编码

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

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

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

但是,micahwittman发布链接表明存在一些细微的编码差异。PHP的rawurlencode()功能应该符合RFC 1738,而Javascript似乎没有这种努力decodeURIComponent()

偏执的版本:转义每个字符

function javascript_escape($str) {
  $new_str = '';

  $str_len = strlen($str);
  for($i = 0; $i < $str_len; $i++) {
    $new_str .= '\\x' . sprintf('%02x', ord(substr($str, $i, 1)));
  }

  return $new_str;
}

编辑:之所以json_encode()可能不合适的原因是,有时您需要防止"生成,例如

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

要么

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

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

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

但是不要运行它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>

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

你可以试试

<script type="text/javascript">
    myvar = unescape('<?=rawurlencode($myvar)?>');
</script>
  1. 别。使用Ajax,将其放在data-*HTML的属性中,或其他有意义的内容。使用内联脚本会使您的页面更大,并且可能不安全或仍然允许用户破坏布局,除非…

  2. …您可以执行更安全的功能:

    function inline_json_encode($obj) {
        return str_replace('<!--', '<\!--', json_encode($obj));
    }
    

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

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

$someString

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

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

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

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

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

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

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

您的HTML / JS如下所示:

<script>
    var myvar = {$MyVarValue};
</script>
本文地址:http://javascript.askforanswer.com/jiangphpzifuchuanchuandigeijavascriptbianliangbingzhuanyihuanxingfuzhongfu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!