2012-11-19 131 views
2

我在chrome上出現「SyntaxError:Unexpected token ILLEGAL」錯誤。SyntaxError:意外的令牌非法

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

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

錯誤在「這是描述」和「新行」之間。爲什麼我不能使用輸入?有沒有辦法讓這個變好?

回答

5

JavaScript字符串中不能有(非轉義的)新行。

您輸出:

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

description後,新的生產線是無效的。

您需要json_encode您的價值(是的,json_encode也適用於普通字符串)。

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

請注意,我刪除了引號。 json_encode將爲您添加引號。

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

Javascript會窒息新行,但你可以「逃避它」來避免這個問題。

或者,正如馬克·B中提及的,可以使用json_encode

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

如果你找到了json_encode輸出空值,那麼你需要utf8_encode您的內容。

+1

錯誤。 '<? echo json_encode($ data)?>'FAR更安全。修正換行符是毫無意義的,如果錯誤是由於一個額外的''' –

+0

@MarcB:取決於內容,但我認爲'json_encode'在很多方面更實用。 –

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"; 
?> 

要理解這些風格之間的差異,看在客戶端上呈現的來源。

相關問題