SyntaxError:意外的标记ILLEGAL

时间:2012-11-19 20:34:16

标签: php javascript jquery google-chrome

我在chrome上遇到“SyntaxError:Unexpected token ILLEGAL”错误。

<?
$data = "this is description
         new line";
?>

$(".gantt").gantt({
  desc: "<? echo $data; ?>"
});

错误在“this is description”和“new line”之间。为什么我不能进入那里?有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:5)

您不能在JavaScript字符串中使用(未转义)新行。

您正在输出:

$(".gantt").gantt({
  desc: "this is description
         new line"
});

description之后的新行无效。

你需要json_encode你的价值(是的,json_encode也适用于普通字符串。)

$(".gantt").gantt({
  desc: <? echo json_encode($data); ?>
});

请注意,我删除了引号。 json_encode会为您添加引号。

答案 1 :(得分:1)

您的代码将在客户端呈现为:

$(".gantt").gantt({
  desc: "this is description
         new line"
});

这是不允许的,因为JavaScript不支持多行字符串(不管怎么说都不支持)。我不确定你要做什么,但如果你只想在你的JavaScript中使用多行代码,你可以这样做:

<?
$data = "this is description\
         new line";
?>

或者这个:

<?
$data = "this is description\" +
        \"new line";
?>

甚至这个:

<?
$data = "this is description\\
         new line";
?>

要了解这些样式之间的区别,请查看客户端上呈现的源代码。

答案 2 :(得分:0)

...
desc: "<?= str_replace('\n', '\\n', $data); ?>",
...

Javascript会在新线上窒息,但你可以“逃避它”以避免这个问题。

或者,如Marc B所述,您可以使用json_encode

...
desc: <?= json_encode($data); ?>,
...

如果您发现json_encode输出空值,则可能需要utf8_encode您的内容。