PHP具有onclick功能

时间:2015-09-06 01:30:38

标签: javascript php syntax onclick

我想从php文件中执行javascript函数

像:

<?php

$type=0;
echo('<img onclick="alert('.$type.')" src="picture.jpg"/>');

?>

结果:确定一切正常。现在我想用字符串来做:

<?php

$type='e';
echo('<img onclick="alert('.$type.')" src="picture.jpg"/>');

?>

结果:未捕获的ReferenceError:e未定义,只需点击@ loadPlayer2.php:2

<?php

$type='e';
echo('<img onclick="alert("'.$type.'")" src="picture.jpg"/>');

?>

结果:未捕获的SyntaxError:意外的令牌}

    <?php

$type='e';
echo('<img onclick="alert(\"'.$type.'\")" src="picture.jpg"/>');

    ?>

结果:未捕获的SyntaxError:意外的标记ILLEGAL

<?php

$type='\e';

echo('<img onclick="alert("$type")" src="picture.jpg"/>');



?>

结果:未捕获的SyntaxError:意外的令牌}

2 个答案:

答案 0 :(得分:3)

不同的上下文需要不同的转义。您正在将PHP字符串与HTML属性和JavaScript字符串混合在一起。

  1. String interpolation仅适用于双引号:

              alternate single+dbl quotes
                         ↓
      echo "<img onclick='alert(\"$type\")' src='picture.jpg'>"
                                ↑
                         escaped quote
    
  2. $type变量可以按照json_encode从PHP字符串转换为JS字符串:

      $type = json_encode($type);
      echo "<img onclick='alert($type)' src='picture.jpg'>"
                                  ↑
                adds "double" quotes automatically
    
  3. 最好将htmlspecialchars应用于整个属性:

      $type = json_encode($type);
      $onclick = htmlspecialchars("alert($type)");
      echo "<img onclick='$onclick' src='picture.jpg'>"
                             ↑
                escapes `"` into `&quot;` 
    
  4. 因此结果输出应如下所示:

       <img onclick='alert(&quot;\\e&quot;)' src='picture.jpg'>
                                                              ↑
                                                      pseudo-XHTML begone
    

    此时,甚至可以再次使用"作为属性值。

答案 1 :(得分:0)

解决:

<?php

$type="e";

echo('<img onclick="alert(\''.$type.'\')" src="picture.jpg"/>');


?>