Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在变量中正确使用引号输出JavaScript_Php_Javascript_Html_Quotes - Fatal编程技术网

Php 在变量中正确使用引号输出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'"

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

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