PHP Escape String中的JS(用于函数)

时间:2013-06-25 06:56:36

标签: php javascript escaping

我有一个PHP脚本,可以通过以下方式为我生成一些Javascript

foreach ($array as $element)
{
    echo '<a onClick="myFunctionTakesPHPValues('.$element[0].','.$element[1].')">'.$element[2].'</a>';
}

我的问题是如何逃脱,以便Javascript位看起来更像

<a onClick='MyFunctionTakesPHPValues("'.$element[0].','.$element[1].'")>'.$element[2].'</a>';

我希望这是有道理的。简短的版本是我觉得我需要在单引号内的双引号内使用三引号,但是没有三引号这样的东西,但我相信有一些方法可以逃避引号将它嵌套三次。

5 个答案:

答案 0 :(得分:3)

与以往一样:编码为JSON。

echo '<a onClick="myFunctionTakesPHPValues('.json_encode($element[0]).','.json_encode($element[1]).')">'.$element[2].'</a>';

答案 1 :(得分:2)

  1. 永远不要回复PHP的JS。远离PHP模式,它将为您节省大量的费用。
  2. 必须正确转义每个值,如this article
  3. 中所述

    因此,对于JS值,您必须使用json_encode() 来转义它们,因为它们进入HTML属性,也将它们作为HTML转义。
    对于最后一个元素,只需要HTML编码。

    foreach ($array as $element) 
    {
        $param1 = htmlspecialchars(json_encode($element[0])); // better give them 
        $param2 = htmlspecialchars(json_encode($element[1])); // meaningful names
        $param3 = htmlspecialchars($element[2]);
    ?>
    <a onClick="myFunctionTakesPHPValues(<?=$param1?>,<?=$param2?>)">
       <?=$param3?>
    </a>
    <? }
    

    是的,在HTML属性中使用原始JS被认为是一种不好的做法。

答案 2 :(得分:1)

使用喜欢

echo "<a onClick='myFunctionTakesPHPValues(\"".$element[0]."\",\"".$element[1]."\")'>".$element[2]."</a>";

答案 3 :(得分:1)

使用此:

echo "<a onClick='MyFunctionTakesPHPValues(\"'".$element[0]."','".$element[1]."'\")>'".$element[2]."'</a>'";

答案 4 :(得分:1)

foreach ($array as $element)
{?>
<a onClick="myFunctionTakesPHPValues("<?php echo $element[0].','.$element[1].')>'.$element[2].'</a>'
} 
?>