0

我将展示代码的主要部分,因为其中大部分是无关紧要的:

    $url = $row['url'];
    echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($url)'>"; 

和javascript函数:

 function myFunction(something) { 
 alert (something);
 }

我在萤火虫中收到以下错误:

missing ) after argument list
[Break On This Error]   
    myFunction(http://anything.com/anything...
-------------------^

我对 javascript 比较陌生,但我可以说它显然不允许来自 url 的“:”。但是,我无法更改或更改 id,因为我需要提醒 Image 的确切 id。

我在没有 php 的情况下以不同的格式完成了这项工作,所以我认为问题出在哪里?

4

4 回答 4

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 属性的内容(即使是其中包含代码的)必须正确编码,因此(例如)&必须是&amp;

于 2012-11-11T13:10:54.993 回答
4

做这个:

$escapedString = json_encode($url);
echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($escapedString)'>";

TJ Crowder 是对的,您可以查看以下内容以获取更多信息:

在 JSON 响应中转义文本的正确方法是什么?

为什么我的第一个解决方案不正确(即使它似乎适用于 1 个案例)?

阅读: http: //kunststube.net/escapism/

echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>";

您基本上需要在传递给 myFunction 调用的值周围打印双引号:

onclick='myFunction(\"$url\")'

于 2012-11-11T13:08:13.813 回答
2

这是因为你正在做这样的事情:

myFunction(http://anything.com)

如果是字符串参数,函数参数需要用引号或双引号括起来:

myFunction("http://anything.com")

所以你的回声应该是这样的:

"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>"

此外,您应该考虑到$url不必包含有效字符,因此您应该添加一些编码/转义(考虑 XSS)。

于 2012-11-11T13:08:50.570 回答
0

您必须使用以下encodeURI(uri)功能:

"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(encodeURI(\'$url\'))'>";
于 2012-11-11T13:09:01.097 回答