2012-08-27 95 views
2

未終止字符串常量未終止字符串常量的JavaScript

你好 我有一個PHP代碼是:

$bodier .= "setInterval('updateClock(\"$date2\",\"clock$x\")',1000);"; 

我用這樣的:

<body onLoad="<?php echo trim($bodier) ; ?>"> 

它產生:

<body onLoad="setInterval('updateClock("2012-10-31 13:14:01","clock0")',1000); 
setInterval('updateClock("2012-08-30 13:10:31","clock1")',1000); 
setInterval('updateClock("2012-08-30 10:16:46","clock2")',1000); 
setInterval('updateClock("2012-08-30 10:17:28","clock3")',1000); 
setInterval('updateClock("2012-09-07 10:17:47","clock4")',1000); 
setInterval('updateClock("2012-08-30 10:18:27","clock5")',1000); 
setInterval('updateClock("2012-08-29 10:18:41","clock6")',1000);"> 

級它的產品錯誤: Unterminates字符串常量

我在做什麼錯

我也曾嘗試複製psting simpley輸出作爲硬編碼,而不是PHP的回聲部分

回答

1

你正在做的常見錯誤在這裏通過在內容字符串中插入無引號的引號字符。看到這個例子:

"foo"bar"com"

你可能會說,該字符串foo"bar"com實際上它是foo作爲下"關閉整個字符串。與您的代碼一樣。 HTML解析器將:"setInterval('updateClock("作爲您的onLoad腳本。這是錯誤的。

編輯:一些字符需要特殊的HTML轉義,這些被稱爲entities。所以,無論與HTML中使用你的輸出,你可能要始終將其穿過htmlspecialchars()功能,留在安全地帶

1

有效的HTML語法

<body onLoad="setInterval('updateClock(\"2012-10-31 13:14:01\",\"clock0\")',1000);"> 

你看,沒有什麼休息時間。

1

您在兩種不同的含義使用。「你不應該你的onload列定義中使用它們。嘗試,而不是定義一個函數與你的setInterval線和onload屬性加載函數名。

(或逃避當然雙引號!)

0

您正確轉義在你的PHP代碼中的",但你還需要確保它在被瀏覽器解析HTML轉義!

使用&quot;

This topic may be useful.

0

你在你的代碼在不同的場合混合起來"'

嘗試這樣的事情(也包括功能使用,而不是在setInterval()函數字符串,並從HTML標記分離的JavaScript):

<script> 
function clockTimer(time, clock) { 
    setInterval(function(){ updateClock(time, clock) }, 1000); 
} 

function onLoader() { 
    clockTimer("2012-10-31 13:14:01","clock0"); 
    clockTimer("2012-08-30 13:10:31","clock1"); 
    clockTimer("2012-08-30 10:16:46","clock2"); 
    clockTimer("2012-08-30 10:17:28","clock3"); 
    clockTimer("2012-09-07 10:17:47","clock4"); 
    clockTimer("2012-08-30 10:18:27","clock5"); 
    clockTimer("2012-08-29 10:18:41","clock6"); 
} 

window.onload = onLoader; 
<script> 

<body> 
... 
相關問題