这个问题已经有一个答案在这里:

什么是最简单的方法进行编码PHP string输出到JavaScript变量?

我有一个PHP string其中包含报价和换行。我需要的内容,这串被放入一个JavaScript变量。

通常情况下,我将只是构建我JavaScript在PHP文件,à la:

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

然而,这并不工作的时候 $myVarValue 包含报价或换行。

有帮助吗?

解决方案

扩大对其他人的回答:

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

使用 json_encode() 需要:

  • PHP5.2.0或大
  • $myVarValue 编码为UTF-8(或US-ASCII,当然)

由于UTF-8支持全Unicode,它应该是安全的转换。

注意,因为 json_encode 逃斜杠,甚至一字符串,其中包含 </script> 将逃脱安全印刷一个脚本块。

其他提示

编码结果的方式

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() 功能应该遵守 RFC1738, 同时有出现,已经没有这样的努力与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>

海地文职支助团的解决方案下的工作对我来说如我不得不定是不是在UTF-8,因此我不能使用json;我投票了,但我的代表还不够高。

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

你可以插入一个隐藏的DIV,然后分配innerHTML DIV你JavaScript变量。你不必担心逃避任何事情。只要确保不把破HTML在那里。

你可以试试

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

不行它不过 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>
  1. 不。使用的Ajax,把它放在 data-* 属性在HTML,或者别的东西有意义的。使用内联脚本,使页面更大, 可能是不安全的或仍允许用户毁了布局, 除非...

  2. ...你做一个更安全的功能:

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

htmlspecialchars

描述

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

某些人物有特别重要的意义在HTML,并应由HTML实体,如果他们是保护它们的含义。这一功能将返回串与这些转换;所翻译成的那些最有用的日常网程序。如果你需要的所有HTML character实体进行翻译,使用htmlentities()instead.

这一功能是有用的,在防止用户提供的文本包含HTML markup,例如在信息板或客书的应用程序。

翻译进行:

* '&' (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,JS和php的解决方案。我们开始与PHP string我们想要拉到一JS变,让我们叫它:

$someString

下一个我们使用的页面隐藏的形式要素,并有自己的价值设置为string:

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

然后它是一个简单的问题定义JS var通过的文件。getElementById:

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

现在你可以使用的JS变量"moonUnitAlpha"任何你想要抓住那PHP string值。这似乎是工作真的很好对我们来说。我们会看到,如果它拥有最大量使用。

如果你使用一个模板发动机构造你HTML然后你可以填补这有什么你想要的!

检查了 XTemplates.这是一个很好的开源、轻便、模板发动机。

你HTML/JS就是这样的:

<script>
    var myvar = {$MyVarValue};
</script>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top