gpt4 book ai didi

echo javascript 函数的 php 语法

转载 作者:行者123 更新时间:2023-11-30 23:51:23 25 4
gpt4 key购买 nike

希望有人能帮我解决这个小问题。问题是我仍然对语法感到困惑

php 行 echo 是一个 JavaScript 函数,它接受一个参数,即数据库值。

需要对其进行更正才能使其正常工作。多余的逗号??转义??我从来不知 Prop 体在哪里。

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);
});

}

谢谢理查德

最佳答案

echo '<li onclick="fill(\''.$row["value"].'\');">'.$row["value"].'</li>';

哎呀。您在 HTML 编码的属性内和 PHP 字符串内都有一个 JavaScript 字符串。难怪转义会让你感到困惑。

首先:你输出 $row['value']在列表项的文本中而不转义。当该值包含像<这样的特殊字符时,这意味着麻烦(潜在的安全问题)。 , &" 。这需要包含在 htmlspecialchars() 中.

接下来,您将在 JavaScript 字符串文字中放入一些内容。这意味着如果字符串分隔符 '或转义反斜杠 \在值中使用,它可以突破字符串并将 JavaScript 代码注入(inject)页面:这又是一个潜在的安全问题。 addslashes()可用于转义字符串以包含在 JS 字符串文字中;请注意,您仍然需要 htmlspecialchars()因为字符串文字本身位于 HTML 编码的属性内。

所以我们正在考虑:

echo "<li onclick=\"fill('".htmlspecialchars(addslashes($row['value']), ENT_QUOTES)."');\">".htmlspecialchars($row['value']).'</li>';

不太可读,是吗?好吧,我们可以改进这一点:

  1. 通过使用 PHP 本身插入字符串,我们可能会丢失 PHP 字符串文字(如 Jonathan 所示)。 PHP 是一种模板语言,充分利用它!

  2. 我们可以定义一个名称比htmlspecialchars更短的函数。 ,这是一个好主意,因为我们需要在典型模板中大量使用该函数。

  3. 我们可以通过让 JavaScript 端从列表项的内容中读取所需的数据来避免 JavaScript 字符串文字(在 jQuery 中为 text() ,因为这就是您似乎正在使用的),而不是必须将其包装在丑陋的内联事件处理程序中。

例如:

<?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>

关于echo javascript 函数的 php 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com