我在 PHP 回显语句中用完了引号

Posted

技术标签:

【中文标题】我在 PHP 回显语句中用完了引号【英文标题】:I ran out of quotation marks in a PHP echo statement 【发布时间】:2020-01-06 11:18:41 【问题描述】:

我已经看到了一些解决方案,但在我的情况下似乎没有一个解决方案,因为我不想显示任何引号。

为了记录,可能还有其他一些我现在没有想到的方法,所以绝对欢迎替代解决方案!

我有一个从 mysql 数据库生成的表,我想让每一行 (tr) 都可点击。 我已经这样做了,但是我将 td 标签改为可点击的,但效果不佳,因为我必须点击文本,而不是容器中的任何位置。

这就是我为 td 标签所做的

echo '<td><a href="case.php?id=' . $row['id'] . '">' . $row['time'] . '</a></td>';

这如我所说,但我必须点击文本本身,所以我放弃了这个想法。 不支持对 tr 标签使用相同的方法(a 标签),如果我尝试使用该方法,则不会发生任何事情。

这就是我现在尝试对 tr 标签做的事情。

echo '<tr onclick="window.location="case.php?id=' . $row['id'] . '";"';

这不起作用,因为 onclick 引号被窗口位置引号关闭。

还有其他方法可以设置窗口位置吗?或者我可以使用其他方法来重定向用户吗?

【问题讨论】:

关键是,内联 js 是一个非常糟糕的做法。就像使用 PHP 创建 JS 函数一样——最好的办法是将语言分成单独的文件并在它们之间传递数据 这和你的问题有关吗?:***.com/questions/17147821/… 只在等号后用单引号生成onclick="window.location='newlocation';"?不过,最好一开始就编写正确的 JS。 试试这个 echo ' @GauravKandpal — 那行不通。 onclick 属性的值现在是 window.location=\\ 不是 html 中的转义字符。 【参考方案1】:

通常最简单的方法是使用标准函数逐个构建嵌套语言结构来转义它的每一级。

例如:

$id = $row['id'];
$url = "case.php?id=" . rawurlencode($id);
$javascript = "window.location=" . json_encode($url) . ";";
$html = '<tr onclick="' . htmlspecialchars($javascript) . '">';
echo $html;

也就是说,通常最好避免嵌套不同的语言。

您可以通过在行内使用常规链接并将 JS 移动到单独的事件处理程序中来处理它(我在此示例中使用 jQuery,因为它更方便)将从该链接获取 URL(如果有)点击该行的一部分:

<?php
    $id = $row['id'];
    $url = "case.php?id=" . rawurlencode($id);
?>

<tr>
    <td>
         <a href="<?=htmlspecialchars($url)?>"> <?=htmlspecialchars($id);?></a>
    </td>
    // etc

<script>
    $("tr").on("click", event => 
        const tr = event.currentTarget;
        const link = $(tr).find("a");
        const url = link.attr("href");
        location = url;
    );
</script>

【讨论】:

我尝试了您的第二个版本,但生成的 URL 为“example.com/help/%3C?=htmlspecialchars($url)?%3E”,而不是例如“example.com/help/case.php?id=14”。你测试过这个方法吗?我有可能在这里做错了,所以你的代码可能仍然是正确的。你知道为什么我会得到这个格式错误的 URL 吗? - 顺便谢谢你的回答! @Kossi — 工作正常when I test it。也许您正试图将 HTML 放入 &lt;?php 块中,因此 &lt;?= 不起作用。你应该注意我的例子第三行的?&gt; 就是这样,我什至没有注意到 :P 它有效!我知道它不太相关,但是您是否知道如何为 tr 标签设置 :hover 属性?因为我只能为 td 标签设置一个 :hover 属性,但我希望整行都受到影响,而不仅仅是一个 td .. 如果没有,无论如何感谢您的帮助!我将此标记为答案:) tr:hover /* whatever */ . 这就是我尝试过的,但它没有做任何事情:/我想我必须提出一个新问题:'(无论如何谢谢!【参考方案2】:

JavaScript 函数在“某物”调用时执行(调用 它)。只要点击 tr,就可以调用 abc() 函数。

你可以这样做

<?php
echo '<tr onclick="abc('.$row['id'].')"';
?>

JS:

function abc(id)

    window.location="case.php?id="+id;

【讨论】:

abc() 从哪里得到 id?我错过了什么吗?

以上是关于我在 PHP 回显语句中用完了引号的主要内容,如果未能解决你的问题,请参考以下文章

如何用sql语句插入一个带有单引号的值

sql语句中有单引号怎么办

如何在PHP中回显已准备好的sql语句的结果

sql语句中,如何表示单引号

Java中如何实现在HTML中用循环语句显示多张图片。

sql 语句插入一个带有单引号的值