0

** 更新 - 私のソリューションは機能しますが (htmlspeciatchars() を使用しない理由はまだ聞いていません)、Jacob Mouka のクリエイティブ ソリューションの修正版を含めて、それを使用する必要がないようにしています。**

json_encode を使用して onClick() 経由で文字列の配列を JavaScript に渡そうとしています。json_encode($array) を渡すだけでは機能しませんでした。json_encode($array) が ["a","b","c"] を返すため、引用符が問題であると推測しました。json_encode($array) を htmlentities() でラップし、JSON.parse(array) を使用して文字列を配列に戻すことに成功しました。

このサイトのすべての投稿を読みましたが、この組み合わせを解決策として示したものはありませんでした.必要以上に複雑にしているのではないかと思います. htmlentities() は使用する正しい関数ですか? この配列を onclick() から JavaScript 関数に送信する簡単な方法はありますか? 前もって感謝します。

Javascript

<script>
function shohmultiple(array){
  alert("Aray as string: " + array);
  array = JSON.parse(array)
  for (i=0; i< array.length; i++){ 
    alert(array[i]);
  }
}
</script>

<?php $array=array("a", "b", "c"); ?>

HTML

<a href="#" onClick="shohmultiple('<?php echo htmlspecialchars(json_encode($array)) ?>')">Click Here</a>

Jacob Mouka からの修正されたソリューション (私が求めているワークフロー用)

Javascript

<script type="text/javascript">

function shohmultiple (array) {
    for (i=0; i< array.length; i++){ 
        alert(array[i]);
    }
}
</script>

HTML

<?php $array = array("a", "b", "c"); ?>

<script>
    // calling this before outputting <a href> works
    <?php  echo "var js_array = " . json_encode($array) . ";"; ?>
</script>

<a href="#" onClick="shohmultiple(js_array);">Click Here</a>
4

2 に答える 2

1

(いくつかのテスト後に編集)

問題は、実際には json_encode が二重引用符を使用していることです。これは、インライン JavaScript を台無しにします (二重引用符も使用します)。json_encode に一重引用符を強制的に使用させる方法があれば、それは修正されます (しかし、存在しないと思います)。ぎこちないソリューションは次のようなものです。

<script type="text/javascript">
<?php
    $array = array("a", "b", "3");
    echo "var js_array = " . json_encode($array) . ";";
?>
    function shohmultiple (val) {
        window.foo = val;
        console.log('got',val);
    }

</script>


<a href="#" onClick="shohmultiple(js_array);">Click Here</a>
于 2013-09-16T20:42:25.637 に答える
0

htmlspecialchars() の使用を避けたい場合は、onClick を一重引用符で囲み、json 文字列の引用符をエスケープします。これは実行機能を保証するものではありませんが (json に一重引用符が含まれている場合は壊れます)、この質問の目的のためには機能します。

このようにしてみてください:

<a href="#" onClick='shohmultiple(\'<?php echo(json_encode($array)); ?>\')'>Click Here</a>
于 2013-09-16T19:19:02.547 に答える