我在 chrome 上出现“SyntaxError: Unexpected token ILLEGAL”错误。
<?
$data = "this is description
new line";
?>
$(".gantt").gantt({
desc: "<? echo $data; ?>"
});
错误在“这是描述”和“新行”之间。为什么我不能在那里使用输入?有没有办法避免这种情况?
我在 chrome 上出现“SyntaxError: Unexpected token ILLEGAL”错误。
<?
$data = "this is description
new line";
?>
$(".gantt").gantt({
desc: "<? echo $data; ?>"
});
错误在“这是描述”和“新行”之间。为什么我不能在那里使用输入?有没有办法避免这种情况?
JavaScript 字符串中不能有(未转义的)新行。
您正在输出:
$(".gantt").gantt({
desc: "this is description
new line"
});
之后的新行description
无效。
你需要json_encode
你的价值(是的,json_encode
也适用于纯字符串)。
$(".gantt").gantt({
desc: <? echo json_encode($data); ?>
});
请注意,我删除了引号。 json_encode
将为您添加报价。
您的代码将在客户端呈现为:
$(".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";
?>
要了解这些样式之间的区别,请查看客户端的渲染源。
...
desc: "<?= str_replace('\n', '\\n', $data); ?>",
...
Javascript 会在换行符上阻塞,但您可以“转义”以避免该问题。
或者,正如 Marc B 提到的,您可以使用json_encode
:
...
desc: <?= json_encode($data); ?>,
...
如果您发现json_encode
输出为空值,那么您很可能需要utf8_encode
您的内容。