【问题标题】:Issue with rel='imageName' when name contains a single quote当名称包含单引号时 rel='imageName' 出现问题
【发布时间】:2012-07-23 02:40:57
【问题描述】:

我的页面上有一个表格,显示卡名、费用、系列、稀有度。此信息来自数据库表。当用户将鼠标悬停在表格中的任何卡片名称上时,卡片会弹出一个图像,并且一旦移除鼠标,图像就会关闭(为此使用 jQuery 脚本)。

卡片名称单元格的代码如下所示:

<td><a href='#' class='screenshot' rel='cards/$cardname.jpg'>$cardname</a></td>

一切正常,除非 $cardname 包含 ' 这会弄乱代码并阻止图像显示(卡名不工作的示例可能是“Faith's Shield”)。我尝试使用 ´ 代替,但这似乎也不起作用。

我知道这可能不是实现我想要做的事情的最佳方式,但我对网络编程还很陌生,这似乎是一个让它工作的简单技巧。

print "<table id='cardTable'>
                <tr>
                    <th>Add to deck</th>
                    <th>Cardname</th>
                    <th>Cost</th>
                    <th>Set</th>
                    <th>Rarity</th>
                </tr>";

        while ($row = mysql_fetch_array($result)) {
            $cardname = $row['cardname'];
            $cost = $row['cost'];
            $set = $row['set'];
            $rarity = $row['rarity'];
            $idCard = $row['idCard'];

            print "<tr>
                    <td>
                    <form action='' method='post'>
                    <p><button type='submit' name='addCard' class='addCard' value='$idCard' title='Add card to deck'></button>
                    <select name='amount'>
                    <option value='1'>1</option>
                    <option value='2'>2</option>
                    <option value='3'>3</option>
                    <option value='4'>4</option>
                    </select></p>
                    </form>
                    </td>
                    <td><a href='#' class='screenshot' rel='cards/$cardname.jpg'>$cardname</a></td>
                    <td>$cost</td>
                    <td>$set</td>
                    <td>$rarity</td>
                </tr>";

        }
            print "</table>";

【问题讨论】:

  • 你必须对 (') 进行编码,你使用的是什么语言?
  • @devundef 我认为他没有编码问题。他正在从数据库中提取数据,但单引号导致 rel='' 属性过早终止并中断。他需要转义单引号或替换它(正如 rajat singhal 建议的那样)
  • 有趣的是,在您的问题标题中,您使用双引号作为属性值,这正是解决您问题的方法。
  • 你为什么使用rel属性?
  • @Sam,这就是我想说的。我的英语太差了! =D

标签: jquery mysql html rel


【解决方案1】:

尝试用双引号将属性值括起来(attrib="value")。那么值中是否有单引号就无关紧要了。此外,将值内的双引号替换为

&quot;

【讨论】:

  • 总是 HTML 转义 HTML 属性的内容。 大多数时间你可以不这样做,但正如你所发现的,并非总是如此。
  • 大多数语言都为您提供了一些方法来转义字符串中的引号。例如,在 PHP 中,您在引号前加上反斜杠 () 字符。下面是一个例子:code echo "this is a string contains a \"quoted\" word.";
【解决方案2】:
<td>
    <a href='#' class='screenshot' rel='cards/<?php echo str_replace("'", '', $cardname); ?>.jpg'></a>
</td>

更合适的是,按照 Felix 的建议,使用 htmlspecialchars,它将转换所有特殊字符..

<td>
    <a href='#' class='screenshot' rel='cards/<?php echo htmlspecialchars($cardname); ?>.jpg'></a>
</td>

【讨论】:

  • htmlspecialchars 会不会更合适?此外,也不确定 OP 是否使用 PHP。
  • 如果你在单引号内使用它,你还必须传递ENT_QUOTES 标志(至少现在很清楚它是PHP ;))
  • 不起作用,已经使用了双引号,所以这弄乱了代码,我用整个表格编辑了我的帖子以使其更清晰,感谢您的帮助!
  • 而不是&lt;td&gt;&lt;a href='#' class='screenshot' rel='cards/$cardname.jpg'&gt;$cardname&lt;/a&gt;&lt;/td&gt;...使用...&lt;td&gt;&lt;a href='#' class='screenshot' rel='cards/".htmlspecialchars($cardname).".jpg'&gt;".htmlspecialchars($cardname)."&lt;/a&gt;&lt;/td&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多