0

オートコンプリート機能のために項目を JavaScript 配列に挿入しようとしています。配列に必要な値をデータベースから取得するので、PHP で取得します。次に、各項目を JavaScript 配列にプッシュします。ただし、「予期しないトークンILLEGAL」があることを伝え続け、挿入された単一の「引用符」文字を指しているように見え、改行があり、実際の値に続きます。

私のjavascript/PHP

<script type="text/javascript">
        $(function() {
           var availableTags = [];
           <?php

              foreach ($modelList as &$model)
                 echo "availableTags.push('$model');" . "\n";
           ?>
           $("#devicemod").autocomplete({
                 source: availableTags
           });
        });


        </script>

その後、エラーメッセージ...

$(function() {
               var availableTags = [];
               availableTags.push('
***Uncaught SyntaxError: Unexpected token ILLEGAL***
ODEL: T]422P');availableTags.push('');availableTags.push('!');availableTags.push('!6.1/120{ MODEL: TM402P');availableTags.push('!A`$');availableTags.push('!DP1110   CREATED ON: JAN 29 2002');availableTags.push('!MODEL: TM402P');

それは...

availableTags.push('ODEL:T]422P');
availableTags.push('');
etc...
4

2 に答える 2

1

これは悪い考えです:

   echo "availableTags.push('$model');" . "\n";

$modeljavascript メタ文字、特に が含まれている場合'、構文エラーが発生し、<script>ブロック全体が強制終了されます。任意のテキストを Javascript コンテキストに直接出力しないでください。基本的に、SQL インジェクション攻撃に相当する JS に対して脆弱です。

最低限、使用json_encode()しているコンテキストに対してテキストが構文的に有効であることを保証するために使用する必要があります。

echo 'availableTags.push(' . json_encode($model) . ");\n";

さらに良いことに...配列を自動的に生成できるのに、なぜこのすべてのプッシュを行うのでしょうか?

<?php
$data = array();
foreach ($modelList as $model) {
   $data[] = $model;
}
?>
var availableTags = <?php echo json_encode($data); ?>;
于 2013-07-23T15:53:22.740 に答える