[英]Proper use of quotes for output of JavaScript in a variable
我正在使用以下代码创建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; ?>';
由于某种原因,无论我如何在playsong('')
引用或输入$source
; 我在playsong();
中playsong();
''
playsong();
结果是像playsong(theSongVariable);
当然那是行不通的。
如何正确引用或输出''
以确保它们留在playsong('')
?
如果可能的话,您应该使用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在document中必须是唯一的 。
您是否尝试过在$ p字符串上使用Addslashes函数。 我认为它的主要目的与构建数据库查询有关,但它也可能适用于您的情况。
根据使用字符串的上下文,有不同的转义字符串方法。
在您的特定情况下,您应该使用:
echo json_encode(htmlspecialchars($p, ENT_QUOTES, *your charset*));
htmlspecialchars可帮助您转义HTML序列,以免Javascript部分中没有</script>
类的时髦内容。
json_encode确保您的字符串作为JavaScript序列有效。
这些是非常重要的安全概念,因为如果您在网站上授予用户特殊权限,则否则会出现严重问题,例如XSS甚至XSRF 。
正如我们在主题上一样,请确保$ user_id是一个经过验证的值,因为否则您很容易受到SQL注入的攻击。 例如,$ user_id可以为“ 1”或“ 1” =“ 1”。
高度
编辑:也,不应该
$p = p.$source;
是
$p = $p.$source;
顺便说一句,不要忘记您可以使用。=运算符。 喜欢
$p .= $source;
edit2:尝试使用输出$ p进行分析(将<更改为&lt;
echo htmlspecialchars($p);
编辑以删除JS行。 显然不是从<?php?>块中输出的。 (应该先喝我的咖啡)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.