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>';

これが理にかなっていることを願っています。短いバージョンは、一重引用符内の二重引用符内に三重引用符が必要だと感じていることですが、三重引用符などはありませんが、引用符をエスケープして 3 回ネストする方法があると思います。

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 値については、HTML 属性に入るときに HTML としてもエスケープする必要がjson_encode() あります。
最後の要素については、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
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 に答える
1

これを使って:

echo "<a onClick='MyFunctionTakesPHPValues(\"'".$element[0]."','".$element[1]."'\")>'".$element[2]."'</a>'";
于 2013-06-25T07:02:43.860 に答える