使用json_encode方法将PHP数组传递到外部Javascript函数,结果为'undefined'

时间:2012-11-08 05:55:32

标签: php javascript arrays json

我已经搜索过了,我也从以下网站获得了一些想法。 Passing PHP array into external Javascript function as array 我的示例代码如下:

 <?php $array_sample = array("c1","c2"); $newArray = json_encode($array_sample); ?>
 <INPUT type="button" value="Php Array" onclick="Test(<?php echo $newArray ?>)" />
 <script language="javascript"> function Test(test_arr){    alert(test_arr); }</script>

对于上述代码,我的undefinedalert message。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用json_encode()时,结果中会保留双引号。所以,json_encode($array_sample)产生:

["c1","c2"]

将此内容放入HTML后,您有:

<INPUT type="button" value="Php Array" onclick="Test(["c1","c2"])" />

如果可以看出,json-output中的双引号会破坏HTML,这会破坏传递给Test()方法的内容。

要解决此问题,您可以使用htmlentities()将双引号转换为HTML值&quot;

<INPUT type="button" value="Php Array" onclick="Test(<?php echo htmlentities($newArray) ?>)" />

编辑htmlentities()addslashes()
似乎使用addslashes()实际上无法正常工作,因为属性中的转义双引号(例如onclick="Test(\"value\")")无效。但是,onclick="Test(&quot;value&quot;)"等html实体版本可以正常工作。

因此,我改变了原来的回答来自&#34;使用addslashes()&#34;到&#34;使用htmlentities()&#34;)。