[英]php syntax for echo javascript function
我希望有人可以帮助我解决这个小问题。 问题是我仍然对语法感到困惑
php行echo是一个javascript函数,它带有一个参数,即数据库值。
需要对其进行纠正,以使其正常工作。 多余的逗号?转义? 我永远不知道确切在哪里。
while($row=mysql_fetch_array($r)){
echo '<li onclick="fill(\''.$row["value"].'\');">'.$row["value"].'</li>';
}
编辑,因为我刚刚发现我的语法是正确的。 我只需要包含反斜杠。 看来javascript函数引起了问题。 特别是隐藏列表的行
有人对此有解决方案吗?
function fill(thisValue) {
$('#inputString').val(thisValue);
//$('#suggesties').hide();
}
编辑我终于想到了:回调
function fill(thisValue) {
$('#suggesties').fadeOut('fast',function(){
$('#inputString').val(thisValue);
});
}
谢谢,理查德
我建议也将字符串转义以用于javascript。 json_encode
可以解决问题。 还有html部分, 如果它不应该包含html :
echo '<li onclick="fill('.htmlentities(json_encode($row["value"])).');">'.htmlspecialchars($row["value"]).'</li>';
您可以将PHP保留在PHP标记内。 有时,它比转义许多地方容易:
<?php while($row=mysql_fetch_array($r)) { ?>
<li onclick="fill('<?php print $row["value"]; ?>');">
<?php print $row["value"]; ?>
</li>
<?php } ?>
echo '<li onclick="fill(\''.$row["value"].'\');">'.$row["value"].'</li>';
哎哟。 您已经在HTML编码的属性和HTML字符串的内部包含了JavaScript字符串。 难怪逃脱使您感到困惑。
好吧,首先:您要在列表项的文本中输出$row['value']
而不进行转义。 当该值包含特殊字符(例如<
, &
和"
)时,就意味着麻烦(可能是安全问题)。需要将其包装在htmlspecialchars()
。
接下来,将某些内容放入JavaScript字符串文字中。 这意味着,如果在值中使用字符串定界符'
或转义的反斜杠\\
,则它可能会脱离字符串并将JavaScript代码注入页面:再次,这是潜在的安全问题。 addslashes()
可用于转义包含在JS字符串文字中的字符串; 请注意,之后您仍然必须对其进行htmlspecialchars()
,因为字符串文字本身位于HTML编码的属性内。
所以我们在看:
echo "<li onclick=\"fill('".htmlspecialchars(addslashes($row['value']), ENT_QUOTES)."');\">".htmlspecialchars($row['value']).'</li>';
不是很可读,是吗? 好吧,我们可以改善这一点:
我们可以通过使用PHP本身对字符串进行插值来丢失PHP字符串文字(如Jonathan所示)。 PHP是一种模板语言,请利用它!
我们可以定义一个名称比htmlspecialchars
短的函数,这是一个好主意,因为我们需要在典型的模板中大量使用该函数。
我们可以通过让JavaScript端从列表项(jQuery中的text()
的内容中读取所需的数据来避免JavaScript字符串,而不必将其包装在丑陋的内联事件处理程序。
例如:
<?php
function h($text) {
echo(htmlspecialchars($text, ENT_QUOTES));
}
?>
<ul id="suggesties">
<?php while ($row= mysql_fetch_array($r)) { ?>
<li><?php h($row['value']); ?></li>
<?php } ?>
</ul>
<script type="text/javascript">
$('#suggesties>li').click(function() {
$('#inputString').val($(this).text());
$('#suggesties').hide();
});
</script>
尝试像这样转义:
while($row=mysql_fetch_array($r)){
echo '<li onclick="fill(\''.$row["value"].'\');">'.$row["value"].'</li>';
}
删除value周围的引号,使您拥有$row[value]
而不是$row["value"]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.