在参数列表后丢失)

时间:2012-11-11 13:06:09

标签: php javascript

我将展示代码的主要部分,因为大部分内容都无关紧要:

    $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的情况下以不同的格式完成了这项工作,所以我认为它存在问题所在?

4 个答案:

答案 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代码)在其中)必须正确编码,以便(例如)&必须&amp;等。

答案 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\'))'>";