【问题标题】:How to escape double quotes in a title attribute如何在标题属性中转义双引号
【发布时间】:2011-04-14 17:52:10
【问题描述】:

我正在尝试在锚的标题属性中使用包含双引号的字符串。到目前为止,我尝试了这些:

<a href=".." title="Some \"text\"">Some text</a>
<!-- The title looks like `Some \` --!>

<a href=".." title="Some &quot;text&quot;">Some text</a>
<!-- The title looks like `Some ` --!>

请注意,使用单引号不是选项。

【问题讨论】:

  • @Haim 阅读了这个问题......它说“单引号不是一种选择”。
  • @harpax - 我只是好奇为什么不能选择单引号?
  • 单引号不是有效的html。
  • 您的第二个示例应该可以完美运行。您在哪个浏览器中看到问题?
  • @harpax:也许你应该澄清“单引号不是一个选项”的要求。我猜你认为“在'the'字符串内”的单引号不是一个选项(显示给用户),但就像 Haim 上面显示的那样翻转单引号和双引号就可以了。

标签: html escaping quotes


【解决方案1】:

这是从a cached page on archive.org 中提取的 HTML 转义字符的 sn-p:

&#060   |   <   less than sign
&#064   |   @   at sign
&#093   |   ]   right bracket
&#123   |   {   left curly brace
&#125   |   }   right curly brace
&#133   |   …   ellipsis
&#135   |   ‡   double dagger
&#146   |   ’   right single quote
&#148   |   ”   right double quote
&#150   |   –   short dash
&#153   |   ™   trademark
&#162   |   ¢   cent sign
&#165   |   ¥   yen sign
&#169   |   ©   copyright sign
&#172   |   ¬   logical not sign
&#176   |   °   degree sign
&#178   |   ²   superscript 2
&#185   |   ¹   superscript 1
&#188   |   ¼   fraction 1/4
&#190   |   ¾   fraction 3/4
&#247   |   ÷   division sign
&#8221  |   ”   right double quote
&#062   |   >   greater than sign
&#091   |   [   left bracket
&#096   |   `   back apostrophe
&#124   |   |   vertical bar
&#126   |   ~   tilde
&#134   |   †   dagger
&#145   |   ‘   left single quote
&#147   |   “   left double quote
&#149   |   •   bullet
&#151   |   —   longer dash
&#161   |   ¡   inverted exclamation point
&#163   |   £   pound sign
&#166   |   ¦   broken vertical bar
&#171   |   «   double left than sign
&#174   |   ®   registered trademark sign
&#177   |   ±   plus or minus sign
&#179   |   ³   superscript 3
&#187   |   »   double greater-than sign
&#189   |   ½   fraction 1/2
&#191   |   ¿   inverted question mark
&#8220  |   “   left double quote
&#8212  |   —   dash

【讨论】:

    【解决方案2】:

    这个变种 -

    &lt;a title="Some &amp;quot;text&amp;quot;"&gt;Hover me&lt;/a&gt;

    是正确的,它按预期工作 - 您在呈现的页面中看到正常的引号。

    【讨论】:

    • 是的。 &lt;a href="#" title="Foo &amp;quot;Bar&amp;quot;"&gt;Testing&lt;/a&gt;&lt;a href="#" title="Smart quotes &amp;#8221;Bar&amp;#8220;"&gt;Testing too&lt;/a&gt; 为我工作。
    • @Maris :嗯...我在渲染页面中没有看到正常的引号,当我制作 " (火狐,铬)。为什么?
    • @Maris,同样的问题。见文字“”当用户将鼠标悬停在元素上时,会同时出现在 IE 和 Chrome 中。
    • 惊人地使用嵌入属性中的 html 内容(用于 javascript 生成可编辑的文本区域):data-editable-note="&lt;?php echo str_replace('"', '&amp;quot;', $note); ?&gt;"&gt;&lt;?php echo mark::up($note); ?&gt;&lt;/div&gt;
    【解决方案3】:

    也许您可以使用 JavaScript 来解决您的跨浏览器问题。它使用了一种不同的转义机制,你显然已经很熟悉了:

    (reference-to-the-tag).title = "Some \"text\"";
    

    它并没有像现在人们希望的那样严格区分 HTML、JavaScript 和 CSS 的功能,但是你需要让谁满意呢?您不认识的用户或技术人员?

    【讨论】:

    • 当可以以更直接的方式实现所需的结果时,过度杀伤力。
    【解决方案4】:

    至少在一种情况下使用单引号是行不通的,那就是如果您正在从 JavaScript “动态”创建标记。您可以使用单引号来包含字符串,然后标记中的任何属性的值都可以使用双引号。

    【讨论】:

      【解决方案5】:

      使用&amp;quot; 是一种方法。我尝试了您的第二个代码 sn-p,它可以在 Firefox 和 Internet Explorer 中运行。

      【讨论】:

        【解决方案6】:

        也可以使用转义码&amp;#34;代替&amp;quot;

        【讨论】:

          【解决方案7】:

          它可能适用于HTML Escape character list 中的任何字符,但我在Java 项目中遇到了同样的问题。我用了StringEscapeUtils.escapeHTML("Testing \" &lt;br&gt; &lt;p&gt;"),标题是&lt;a href=".." title="Test&amp;quot; &amp;lt;br&amp;gt; &amp;lt;p&amp;gt;"&gt;Testing&lt;/a&gt;

          仅当我将 StringEscapeUtils 更改为 StringEscapeUtils.escapeJavascript("Testing \" &lt;br&gt; &lt;p&gt;") 时它才对我有效,并且它在每个浏览器中都有效。

          【讨论】:

          • 我认为最好的解决方案
          • 如果您使用的是 Java,那很好,但由于最初的询问者要求 HTML,也许这不是一个选项。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-19
          • 2018-12-17
          • 1970-01-01
          相关资源
          最近更新 更多