【问题标题】:PHP with onclick function带有 onclick 功能的 PHP
【发布时间】:2015-09-06 01:30:37
【问题描述】:

我想从一个 php 文件执行一个 javascript 函数

喜欢:

<?php

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

?>

结果:好的,一切正常。现在我想用一个字符串来做:

<?php

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

?>

结果:Uncaught ReferenceError: e is not definedonclick @ loadPlayer2.php:2

<?php

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

?>

结果:未捕获的 SyntaxError: Unexpected token }

    <?php

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

    ?>

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

<?php

$type='\e';

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



?>

结果:未捕获的 SyntaxError: Unexpected token }

【问题讨论】:

    标签: javascript php syntax onclick


    【解决方案1】:

    不同的上下文需要不同的转义。您将 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
      

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

    【讨论】:

      【解决方案2】:

      已解决:

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

      【讨论】:

        猜你喜欢
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        • 1970-01-01
        • 2016-01-11
        相关资源
        最近更新 更多