【问题标题】:why cant I pass this variable to the javascript function?为什么我不能将此变量传递给 javascript 函数?
【发布时间】:2009-11-11 17:22:59
【问题描述】:

我的 php 文件中有一个变量,每当用户单击我的 php 页面上的链接时,我想将其传递给 javascript 函数。

这里是简单的 php:

$delete_img=$image_id.'_'.$newfilename;
$display_image.="<td><img src='../temp_images/$newfilename'>";
if ($i==$extra_pic){ 
$display_image.="<br><a href='#' onclick='window.parent.reset_imageform($i, $delete_img);'>delete picture</a></td>";}

“if($i==$extra_pic) 为 TRUE,所以不要介意...

问题是,如果您单击“删除图片”链接,则应该调用函数 reset_imageform(nr, pic_nr),但每当我尝试将变量 $delete_img 传递给函数时,它都不会调用。 一旦我从调用中删除此变量,例如“reset_imageform($i);”然后它工作。但是添加该变量会使其不起作用。 该函数根本没有被调用!

该变量包含一个随机 id nr,带有一个下划线,然后是一个文件名,例如:23432423439_picture.jpg

这里有什么我遗漏的吗,我应该先对 $delete_img 做些什么,然后再将其发送到 php 中?

我所有的文档都是 utf-8 格式!

谢谢

PS:如果您需要更多输入,请告诉我...

【问题讨论】:

    标签: php javascript html


    【解决方案1】:

    因为它是一个字符串,所以你需要引用它。

    正确的做法是这样的:

    $display_image.='<br><a href="#" onclick="window.parent.reset_imageform(' . $i . ', '
        . htmlspecialchars(json_encode($delete_img))
        . ');">delete picture</a></td>';
    

    我已经交换了引号以使其适用于任何字符串;否则,如果您在其他地方使用它并且字符串包含撇号,它将无法工作。交换引号的另一种方法是将ENT_QUOTES 传递给htmlspecialchars()

    你说 $i 是它自己的作品,所以我假设 $i 是一个整数 - 因此它不需要引用。

    【讨论】:

    • +1 正确转义。如果 $i 变量不是一个简单的整数,它也将需要它。虽然htmlspecialchars-json_encode 一个整数也没有什么坏处;为了以防万一,通常最好对任何值使用相同的转义。
    • 我错过了$ 关闭$display_image - 这就是为什么?
    • 对不起,不,那不是为什么...无论如何,下面的答案有效...如果文档都在 utf-8 中,真的有理由使用 json_encode 吗?
    • 如果你不使用 json_encode,任何对 JavaScript 字符串字面量特殊的字符,特别是引号和反斜杠,都会直接通过,在最好的情况下使你的脚本出错并给你一个跨站点脚本安全漏洞最严重。如果您在没有用户输入的情况下自行生成 $delete_img,您可能会认为它是安全的,但养成跳过转义步骤的习惯并不是一个好主意。
    【解决方案2】:

    如果您将字符串传递给 JavaScript 函数,则必须正确引用它:

    所以没有php,它看起来像:

    <br><a href='#'
      onclick='window.parent.reset_imageform(5, "23432423439_picture.jpg");'>
        delete picture</a></td>
    

    因此,要获得生成的 HTML,您需要包含引号:

    $display_image.="<br><a href='#'
      onclick='window.parent.reset_imageform({$i}, \"{$delete_img}\");'>
        delete picture</a></td>";
    

    我们这里有多层引号,所以23432423439_picture.jpg周围的双引号需要转义,比如\"

    【讨论】:

      【解决方案3】:

      当 Javascript 出现问题时,不要查看生成它的服务器端代码,而是查看最终输出(在 webbrowser 中右键单击页面并选择“查看源代码”左右)并只专注于生成的 JS 代码。这样,您应该更快地发现 JS 字符串变量周围缺少的引号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-04
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        • 2020-08-24
        • 2012-01-15
        • 2011-02-05
        • 1970-01-01
        相关资源
        最近更新 更多