正确使用引号来输出变量中的JavaScript

时间:2009-05-28 15:21:56

标签: php javascript html quotes

我正在使用以下代码创建一大块HTML / JavaScript:

$result = mysql_query("SELECT * FROM posts WHERE userid = '$user_id' ORDER BY DATE desc LIMIT 5")or die (mysql_error());

while ($row = mysql_fetch_array($result))
{

    $source = $row[source];
    $source = "'$source'";

    $p = $p.'<div id="red-div"><div id="smartass"><div id="image"><img src="thumbs/'.$user_image.'" /></div><div id="playsong"><a href="#" onclick="playsong(';
    $p = p.$source;
    $p = $p.'); return false;"><img src="play.png" width="16" height="16" border="0" /></a>'.$row[artist].' - '.$row[title].'</div></div><div id="post-comment">'.$row[comment].'</div><div id="post-date">'.$row[date].'</div></div><div id="dotted-line"></div>';

}

然后我使用以下代码更新我的页面的一部分:

parent.document.getElementById('posts').innerHTML = '<?php echo $p; ?>';

出于某种原因,无论我如何引用或$source进入playsong('');我松开''中的playsong();,导致类似playsong(theSongVariable);的内容,当然不起作用。

如何正确引用或输出''以确保它们留在playsong('');?

4 个答案:

答案 0 :(得分:3)

如果可能,您应该使用json_encode构建JavaScript字符串声明,并使用htmlspialchars将其用作HTML属性值:

$onclick = 'playsong('.json_encode($row['source']).'); return false';
$p .= '<div id="red-div"><div id="smartass"><div id="image"><img src="thumbs/'.htmlspecialchars($user_image).'" /></div>';
$p .= '<div id="playsong"><a href="#" onclick="'.htmlspecialchars($onclick).'"><img src="play.png" width="16" height="16" border="0" /></a>';
$p .= htmlspecialchars($row[artist].' - '.$row[title]).'</div></div>';
$p .= '<div id="post-comment">'.htmlspecialchars($row['comment']).'</div>';
$p .= '<div id="post-date">'.$row['date'].'</div></div><div id="dotted-line"></div>';

哦,还有IDs must be unique in documents

答案 1 :(得分:1)

您是否尝试在$ p字符串上使用addslashes函数。我认为它的主要目的是为数据库构建查询,但它也适用于您的情况。

答案 2 :(得分:1)

根据您使用它们的上下文,有不同的方法来转义字符串。

在您的具体情况下,您应该使用:

echo json_encode(htmlspecialchars($p, ENT_QUOTES, *your charset*));

htmlspecialchars可帮助您转义HTML序列,以便您在Javascript部分中没有</script>等时髦的东西。

json_encode确保您的字符串作为JavaScript序列有效。

这些是非常重要的安全概念,因为如果您授予用户对您网站的特殊权限,则存在严重问题,例如XSS甚至XSRF

正如我们所讨论的那样,请确保您的$ user_id是经过验证的值,否则您很容易受到SQL injection的攻击。例如,$ user_id可以是“1”或“1”=“1”。

H个

答案 3 :(得分:0)

编辑:也,不应该

$p = p.$source;

$p = $p.$source;
顺便说一下,别忘了你可以使用。=运算符。像

$p .= $source;

EDIT2: 尝试输出你的$ p进行分析(将改变&lt;到&amp; lt;

echo htmlspecialchars($p);

编辑删除JS行。显然没有从&lt;?php?&gt;中输出块。 (应该先喝咖啡)