未终止的字符串常量
你好我有一个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);">
并且它产生了一个错误:取消终止字符串常量
我做错了什么
我还尝试过将psting simpley输出复制为硬编码,而不是php echo部分
有效的html语法是
<body onLoad="setInterval('updateClock("2012-10-31 13:14:01","clock0")',1000);">
你看,什么都不坏。
您使用的"有两种不同的含义。您不应该在onload字符串定义中使用它们。请尝试使用setInterval行定义函数,并在onload属性中加载函数名称。
(当然也可以转义双引号!)
您在内容字符串中放入未加引号的字符,这是一个常见的错误。参见此示例:
"foo"bar"com"
你可以说这个字符串是foo"bar"com
,事实上它是foo
,因为下一个"
关闭了整个字符串。与您的代码相同。HTML解析器将:"setInterval('updateClock("
视为onLoad脚本。这是错误的。
编辑:有些字符需要特殊的HTML转义,这些字符被称为entities
。因此,无论您输出的内容与HTML一起使用,您都可能希望始终通过htmlspecialchars()
函数传递它,以保持
您在php代码中正确地转义了"
,但也需要确保它在浏览器解析的HTML中转义!
使用"
。
这个主题可能很有用。
您在代码中的不同场合会混淆"
和'
。
试试这样的方法(还包括函数的使用,而不是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>
...