未终止的字符串常量JavaScript

时间:2012-08-27 11:39:56

标签: php javascript mysql

未终止的字符串常量

您好 我有一个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);">

它产生错误: 取消终止字符串常量

我做错了什么

我还尝试将输出简单地复制为硬编码而不是php echo部分

5 个答案:

答案 0 :(得分:1)

通过在内容字符串中添加未加掩盖的引号字符,您在这里犯了一个常见的错误。见这个例子:

"foo"bar"com"

您可以说字符串foo"bar"com实际上是foo,因为下一个"会关闭整个字符串。与您的代码相同。 HTML解析器将"setInterval('updateClock("视为您的onLoad脚本。哪个错了。

编辑:某些字符需要特殊的HTML转义,这些字符称为entities。因此,无论您输出哪些内容与HTML一起使用,您都可能希望始终通过htmlspecialchars()函数传递它,以保持安全;

答案 1 :(得分:1)

有效的html语法是

<body onLoad="setInterval('updateClock(\"2012-10-31 13:14:01\",\"clock0\")',1000);">
你看,没什么好坏的。

答案 2 :(得分:1)

您正在使用“两种不同的含义。您不应在onload字符串定义中使用它们。请尝试使用setInterval行定义函数,并在onload属性中加载函数名称。

(当然要逃避双引号!)

答案 3 :(得分:0)

您正好逃脱了PHP代码中的",但您还需要确保它在浏览器解析的HTML中进行转义!

使用&quot;

This topic may be useful.

答案 4 :(得分:0)

您在代码中的各种场合混淆了"'

尝试这样的事情(还包括使用函数,而不是setInterval()函数中的字符串,并将JavaScript与HTML标记分开):

<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>
...
相关问题