Php 在变量中正确使用引号输出JavaScript
我正在使用以下代码创建一块HTML/JavaScript:Php 在变量中正确使用引号输出JavaScript,php,javascript,html,quotes,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'"
$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>';
}
$result=mysql\u query(“从帖子中选择*,其中userid='$user\u id'按日期排序desc LIMIT 5”)或die(mysql\u error());
while($row=mysql\u fetch\u数组($result))
{
$source=$row[source];
$source=“'$source'”;
$p=$p.'.$row[艺术家].-'.$row[标题].'.$row[评论].'.$row[日期].';
}
然后,我用以下代码更新页面的一部分:
parent.document.getElementById('posts').innerHTML = '<?php echo $p; ?>';
parent.document.getElementById('posts').innerHTML='';
出于某种原因,无论我如何引用或将$source
输入playsong(“”)
;我在playsong()中松开了”
代码>产生类似于播放歌曲的内容(歌曲变量)代码>这当然不起作用
我如何正确引用或输出'
,以确保它们保持在播放歌曲(''>
您是否尝试在$p字符串上使用该函数。我认为它的主要目的是为数据库构建查询,但在您的情况下,它可能也适用于您。编辑:也不应该
$p = p.$source;
是
顺便说一句,别忘了你可以使用。=运算符。像
$p .= $source;
编辑2:
尝试使用(将更改为<)输出$p进行分析
echo htmlspecialchars($p);
编辑以删除JS行。显然不是从块内输出的。(应该先喝咖啡)如果可能,您应该使用来构建JavaScript字符串声明,并将其用作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>';
$onclick='playsong('.json_encode($row['source']);返回false';
$p.='';
$p.='';
$p.=htmlspecialchars($row[artist].-'.$row[title]);
$p.='.htmlspecialchars($row['comment'])。';
$p.=''.$row['date'.'”;
哦,还有。根据使用字符串的上下文,有不同的方法来转义字符串
在您的具体情况下,您应该使用:
echo json\u encode(htmlspecialchars($p,ENT\u引号,*your charset*);
帮助您转义HTML序列,这样您就不会在Javascript部分中出现诸如
之类的古怪内容
确保字符串作为JavaScript序列有效
这些都是非常重要的安全概念,因为否则会出现严重的问题,例如,甚至如果您在您的站点上授予用户特殊权限
在本主题中,请确保您的$user\u id是一个已验证的值,否则您可能会受到攻击。例如,$user\u id可以是“1”或“1”=“1”
Hth当然,这是一个缺少的$…谢谢你修复了它。JavaScript确实可以工作,因为它被处理,然后发送回JavaScript,然后在页面加载时JavaScript执行是吗?不懂json,但会阅读htmlspecialchars()谢谢。我认为json_export()应该是json_encode()在你的例子中,mysql\u real\u escape\u string()是保护我的$user\u id变量和其他类似变量的最佳方法吗?这是一个选项。我已经一年多没有积极使用PHP了,但我记得他们正在讨论更新的较慢的mysqli接口,该接口允许在查询中使用占位符。我想试一试。
$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>';