将PHP数组传递给外部Javascript函数

时间:2013-12-02 21:50:41

标签: php

我需要将数组从php传递给javascript函数。我读到我必须使用方法json_encode,但可能有问题,因为它不起作用......

PHP文件

<?php
    echo "<img id=", $i, " src=", path($i), " onclick=\"view(", $i, ", ", json_encode($arrayIm), ", ", json_encode($arrayNa), ")\"'/>";
?>

Javascript文件

function view(i, arrayIm, arrayNa) {
    //code..
}

4 个答案:

答案 0 :(得分:0)

两件事:

  1. 您的图片代码末尾有一个悬空撇号。

  2. 您没有进行任何HTML编码以及 JSON编码。

  3. 以下是使用printf()将HTML与变量分开的示例:

    printf('<img id="%s" src="%s" onclick="view(%s, %s, %s)" />',
        htmlspecialchars($i, ENT_QUOTES, 'UTF-8'),
        htmlspecialchars($i, ENT_QUOTES, 'UTF-8'),
        htmlspecialchars(json_encode($i), ENT_QUOTES, 'UTF-8'),
        htmlspecialchars(json_encode($arrayIm), ENT_QUOTES, 'UTF-8'),
        htmlspecialchars(json_encode($arrayNa), ENT_QUOTES, 'UTF-8')
    );
    

    需要额外的htmlspecialchars(),因为您在属性值中使用了JavaScript代码,并且该值必须按此编码(即" =&gt; &quot;等。 )

答案 1 :(得分:0)

谢谢大家,但我仍然没有解决问题,尽管已经采用了最终的引号。但是通常在javascript中使用这些数组还是应该应用某些函数? 为什么当我在javascript中使用这些数组时,我注意到,尽管已经要求打印数组元素(例如arrayIm [0]),我打印整个表单数组 [“A B C D”] .. 我为我糟糕的英语道歉。

答案 2 :(得分:-1)

请注意 json_encode 会生成引号,这会引起你的onclick =&#34;&#34;引号。您可以使用类似的东西来解决问题:

echo "<img id=", $i, " src=", path($i), " onclick=\"view(", $i, ", ", str_replace('"', '\\"', json_encode($arrayIm)), ", ", str_replace('"', '\\"', json_encode($arrayNa)), ")\"'/>";

我知道这很快又脏,但应该有效。它取决于你&#34;美化&#34;它:)

答案 3 :(得分:-1)

你搞砸了一些语法。你需要使用。 (点)连接字符串而不是逗号。你最后还有一个额外的单引号。

echo "<img id=".$i." src=".path($i)." onclick=\"view(".$i.", ".json_encode($arrayIm).", ".json_encode($arrayNa).");\"/>";