-1

我正在使用以下代码创建一大块 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

4 回答 4

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>';

哦,ID 在文档中必须是唯一的

于 2009-05-28T15:29:22.207 回答
1

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

于 2009-05-28T15:26:36.643 回答
1

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

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

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

htmlspecialchars可帮助您转义 HTML 序列,这样您就不会出现</script>Javascript 部分等时髦的东西。

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

这些是非常重要的安全概念,否则如果您在您的网站上授予用户特殊权限,则会出现XSS甚至XSRF等严重问题。

在我们讨论这个主题时,请确保您的 $user_id 是经过验证的值,否则您很容易受到SQL 注入的攻击。例如,$user_id 可以是“1”或“1”=“1”。

Hth

于 2009-05-28T15:48:59.110 回答
0

编辑:也不应该

$p = p.$source;

$p = $p.$source;

顺便说一句,不要忘记您可以使用 .= 运算符。像

$p .= $source;

编辑2:尝试使用输出您的 $p 进行分析(将 < 更改为 <

echo htmlspecialchars($p);

编辑删除 JS 行。显然不是从 <?php ?> 块中输出的。(应该先喝我的咖啡)

于 2009-05-28T15:26:40.557 回答