将PHP变量传递给Javascript的最佳方法是什么?

Gre*_*ijn 13 javascript php variables

我目前在隐藏的输入字段中回显某些变量,并在需要时用Javascript读出它们.

我和一位同事正在考虑用PHP生成一个额外的Javascript文件,该文件只包含Javascript的所有变量.这种方式变量已经存在,HTML中没有额外的代码.

将变量从PHP传递到Javascript有什么好方法?我们的解决方案如何发声?

Daf*_*aff 25

一般数据传递

常用的JavaScript交换格式是JSON,使用json_encode.像这样的PHP文件:

<?php
    $data = array("test" => "var", "intvalue" => 1);
    echo json_encode($data);
?>
Run Code Online (Sandbox Code Playgroud)

然后返回一个JavaScript对象文字,如下所示:

{
    "test" : "var",
    "intvalue" : 1
}
Run Code Online (Sandbox Code Playgroud)

您可以直接将其回显到页面上的JavaScript变量,例如:

var data = <?php echo json_encode($data)?>;
Run Code Online (Sandbox Code Playgroud)

...或通过Ajax请求它(例如使用jQuery的getJSON).

输出到标签上的属性

如果您只需要将字符串输出到标签上的属性,请使用htmlspecialchars.假设一个变量:

<?php
$nifty = "I'm the nifty attribute value with both \"double\" and 'single' quotes in it.";
?>
Run Code Online (Sandbox Code Playgroud)

...你可以像这样输出:

<div data-nifty-attr="<?php echo htmlspecialchars($nifty)?>">...</div>
Run Code Online (Sandbox Code Playgroud)

......或者如果你使用短标签:

<div data-nifty-attr="<?= htmlspecialchars($nifty)?>">...</div>
Run Code Online (Sandbox Code Playgroud)

  • 是的,JSON绝对是最简单的.如果您将JSON写入`<script>`块,也可以使用`JSON_HEX_TAG`选项,以防止字符串中的`</ script>`序列过早地结束块(并可能导致XSS). (2认同)

Jav*_*ier 5

<?php
  $my_php_var = array(..... big, complex structure.....);
?>
<script type="text/javascript">
  my_js_var = <?=json_encode ($my_php_var)?>;
</script>
Run Code Online (Sandbox Code Playgroud)