1

我有一个脚本,它以如下方式为我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>';

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

4

5 回答 5

3

与往常一样:编码为 JSON。

echo '<a onClick="myFunctionTakesPHPValues('.json_encode($element[0]).','.json_encode($element[1]).')">'.$element[2].'</a>';
于 2013-06-25T07:04:27.100 回答
2
  1. 永远不要从 PHP 中回显 JS。转而退出 PHP 模式,它会为你省去很多斜线和神经。
  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 被认为是一种不好的做法。

于 2013-06-25T07:36:48.957 回答
1

用这个:

echo "<a onClick='MyFunctionTakesPHPValues(\"'".$element[0]."','".$element[1]."'\")>'".$element[2]."'</a>'";
于 2013-06-25T07:02:43.860 回答
1
foreach ($array as $element)
{?>
<a onClick="myFunctionTakesPHPValues("<?php echo $element[0].','.$element[1].')>'.$element[2].'</a>'
} 
?>
于 2013-06-25T07:12:01.390 回答
1

使用喜欢

echo "<a onClick='myFunctionTakesPHPValues(\"".$element[0]."\",\"".$element[1]."\")'>".$element[2]."</a>";
于 2013-06-25T07:01:15.220 回答