使用PHP插入JavaScript时获得意外换行符

使用PHP插入JavaScript时获得意外换行符,php,javascript,Php,Javascript,我正在尝试将项目插入到自动完成函数的javascript数组中。我从数据库中获取数组所需的值,因此我使用PHP获取它们。然后,我只需将每个项目推入javascript数组。但是,它一直告诉我,我有一个“意外标记非法”,它看起来像是指向插入的单个“引号”字符,然后有一个换行符,然后继续到实际值 我的javascript/PHP <script type="text/javascript"> $(function() { var availableT

我正在尝试将项目插入到自动完成函数的javascript数组中。我从数据库中获取数组所需的值,因此我使用PHP获取它们。然后,我只需将每个项目推入javascript数组。但是,它一直告诉我,我有一个“意外标记非法”,它看起来像是指向插入的单个“引号”字符,然后有一个换行符,然后继续到实际值

我的javascript/PHP

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

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


        </script>
结果应该是

availableTags.push('ODEL:T]422P');
availableTags.push('');
etc...
这是个坏主意:

   echo "availableTags.push('$model');" . "\n";
如果
$model
包含任何javascript元字符,特别是
'
,则会引入语法错误并杀死整个
块。永远不要直接将任意文本输出到Javascript上下文中——您基本上很容易受到JS等价于Java的攻击

至少,您应该使用
json\u encode()
来保证您的文本在语法上对于您使用它的上下文是有效的:

echo 'availableTags.push(' . json_encode($model) . ");\n";
或者更好的是。。。既然你可以自动生成一个数组,为什么还要这么做呢

<?php
$data = array();
foreach ($modelList as $model) {
   $data[] = $model;
}
?>
var availableTags = <?php echo json_encode($data); ?>;

var availableTags=;
使用,只需一个(安全的)步骤即可完成此操作:


确保变量没有任何引号。如果有,您将不得不转义它们。您可能还想用
\n
<?php
$data = array();
foreach ($modelList as $model) {
   $data[] = $model;
}
?>
var availableTags = <?php echo json_encode($data); ?>;
<script type="text/javascript">
$(function() {
   $("#devicemod").autocomplete({
       source: <?php echo json_encode($modelList); ?>
   });
});
</script>