echo javascript函数的php语法

时间:2009-09-20 14:39:32

标签: php javascript syntax

我希望有人可以帮我解决这个小问题。 问题是我仍然对语法

感到困惑

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

    }
谢谢,理查德

5 个答案:

答案 0 :(得分:1)

我建议也转义字符串以便在javascript中使用。 json_encode可以解决问题。还有html部分,如果它不应该包含html

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

答案 1 :(得分:1)

您可以将PHP保留在PHP标记内。有时它比逃离许多地方容易:

<?php while($row=mysql_fetch_array($r)) { ?>
  <li onclick="fill('<?php print $row["value"]; ?>');">
    <?php print $row["value"]; ?>
  </li>
<?php } ?>

答案 2 :(得分:1)

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

哎哟。在PHP字符串文字中,你有一个JavaScript字符串文字,在HTML编码的属性中。难怪逃跑让你感到困惑。

嗯,首先:你在列表项的文本中输出$row['value']而没有转义。当该值包含<&"等特殊字符时,这意味着出现问题(可能存在安全问题)。这需要包含在htmlspecialchars()

接下来,您将一些内容放在JavaScript字符串文字中。这意味着如果在值中使用字符串分隔符'或转义反斜杠\,它可以突破字符串并将JavaScript代码注入页面:同样,这是一个潜在的安全问题。 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端从jQuery中的列表项(text()的内容中读取所需数据来避免JavaScript字符串文字,因为这就是你似乎正在使用的东西),而不是必须将它包装在一个丑陋的内联事件处理程序中。

  4. 例如:

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

答案 3 :(得分:0)

尝试逃避:

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

}

答案 4 :(得分:0)

删除值周围的引号,以便$row[value]代替$row["value"]