繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM