我有一个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>';
我希望这是有道理的。简短的版本是我觉得我需要在单引号内的双引号内使用三引号,但是没有三引号这样的东西,但我相信有一些方法可以逃避引号将它嵌套三次。
答案 0 :(得分:3)
与以往一样:编码为JSON。
echo '<a onClick="myFunctionTakesPHPValues('.json_encode($element[0]).','.json_encode($element[1]).')">'.$element[2].'</a>';
答案 1 :(得分:2)
因此,对于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>'
}
?>