我将展示代码的主要部分,因为大部分内容都无关紧要:
$url = $row['url'];
echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($url)'>";
和javascript函数:
function myFunction(something) {
alert (something);
}
我在firebug中收到以下错误:
missing ) after argument list
[Break On This Error]
myFunction(http://anything.com/anything...
-------------------^
我对javascript相对较新,但我可以说它显然不允许来自网址的“:”。但是,我无法更改或更改ID,因为我需要提醒图像的确切ID。
我在没有php的情况下以不同的格式完成了这项工作,所以我认为它存在问题所在?
答案 0 :(得分:5)
URL必须是一个字符串,但您只是输出字符串的内容。
你可以按照其他地方的建议在其周围加上引号,但这至多是一个不完整的解决方案。
幸运的是,PHP为您提供了更好的答案:json_encode
结合(在您的情况下)与htmlspecialchars
。这是一个函数,除其他外,将为您正确包装一个字符串,以便您可以在JavaScript代码中使用它。所以:
$escapedUrl = htmlspecialchars(json_encode($url));
然后
...onclick='myFunction($escapedUrl)'...
json_encode
用于将文本编码为JSON,但由于JSON是JavaScript文字表示法的子集,json_encode
非常乐意返回有效的,正确转义的JavaScript字符串...
您还需要htmlspecialchars
因为您正在将生成的JavaScript代码输出到onclick
属性,并将HTML文本中的所有HTML属性的内容输出(即使是带有代码的HTML代码)在其中)必须正确编码,以便(例如)&
必须&
等。
答案 1 :(得分:4)
这样做:
$escapedString = json_encode($url);
echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($escapedString)'>";
T.J。克劳德是对的,您可以查看这些以获取更多信息:
What is the correct way to escape text in JSON responses?
为什么我的第一个解决方案不正确(即使它似乎适用于1个案例)?
阅读本文:http://kunststube.net/escapism/
<击> 撞击>
<击>echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>";
你基本上需要在传递给myFunction调用的值周围打印双引号:
onclick='myFunction(\"$url\")'
击> <击> 撞击>
答案 2 :(得分:2)
这是因为你正在做这样的事情:
myFunction(http://anything.com)
在字符串参数的情况下,函数参数必须用引号或doble引号括起来:
myFunction("http://anything.com")
所以你的回声应该是这样的:
"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>"
此外,您应该考虑到$url
不必包含有效字符,因此您应该添加一些编码/转义(根据XSS考虑)。
答案 3 :(得分:0)
您必须使用encodeURI(uri)
功能:
"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(encodeURI(\'$url\'))'>";