未终止的字符串常量
您好 我有一个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部分
答案 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)
答案 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>
...