我正在使用以下代码创建一大块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('')
;?
答案 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>';
答案 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;中输出块。 (应该先喝咖啡)