如何在标题属性中转义双引号

240

我试图在一个锚点标签的 title 属性中使用包含双引号的字符串。到目前为止,我尝试了以下方法:

<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 ` --!>

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


19
@Haim,请仔细阅读问题...它说“单引号不是一个选项”。 - nocksock
2
@harpax - 我只是好奇为什么单引号不是一个选项? - Bert F
3
单引号不是有效的HTML语法。 - skyfoot
1
你的第二个例子应该完美地工作。你在哪个浏览器中看到这个问题? - Olly Hodgson
1
@harpax:也许你应该澄清“不能使用单引号”的要求。我猜你的意思是“在‘字符串’内的单引号不可用”(作为向用户显示的内容),但像Haim上面展示的那样,只需切换单引号和双引号即可。 - Christian.K
显示剩余5条评论
7个回答

360
这个变量 -

<a title="Some &quot;text&quot;">Hover me</a>

这是正确的,并且按预期工作 - 在呈现的页面中,您可以看到正常的引用。


1
没错。<a href="#" title="Foo &quot;Bar&quot;">测试</a><a href="#" title="Smart quotes &#8221;Bar&#8220;">也测试</a> 对我起作用。 - Olly Hodgson
5
@Maris:嗯……当我在Firefox和Chrome中输入“"e;”时,在渲染的页面中看不到正常的引号。为什么? - Jazi
@Maris,我也遇到了同样的问题。当用户将鼠标悬停在元素上时,在IE和Chrome中都会出现文本“"”。 - rstackhouse
惊人的是,它可以处理嵌入属性中的HTML内容(用于JavaScript生成可编辑文本区域):data-editable-note="<?php echo str_replace('"', '&quot;', $note); ?>"><?php echo mark::up($note); ?></div> - WEBjuju

38

这是从存档网页中获取的HTML转义字符片段:

&#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

10

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


4
使用&quot;是实现它的方法。我尝试了你的第二个代码片段,在Firefox和Internet Explorer中都可以工作。

4
也许您可以使用JavaScript解决跨浏览器问题。它使用不同的转义机制,其中一个您显然已经熟悉:
(reference-to-the-tag).title = "Some \"text\"";

现在的人们希望严格区分HTML、JavaScript和CSS的功能,但是你需要让谁满意呢?是你的用户还是你不认识的技术人员?


1
在可以通过更为简单的方式达到所需结果时,过度设计是不必要的。 - user1945782

3

它可以使用HTML转义字符列表中的任何字符,但我在Java项目中遇到了同样的问题。我使用了StringEscapeUtils.escapeHTML("Testing \" <br> <p>"),标题为<a href=".." title="Test&quot; &lt;br&gt; &lt;p&gt;">Testing</a>

只有当我将StringEscapeUtils更改为StringEscapeUtils.escapeJavascript("Testing \" <br> <p>")时,它才对我起作用,并且在每个浏览器中都有效。


在我看来,最佳解决方案。 - Mohammed Rafeeq
如果您使用Java,那就很好,但是由于原始询问者正在寻求HTML,因此这可能不是一个选项。 - user1945782

1

至少有一种情况下单引号不能使用,那就是如果你正在使用JavaScript“即时创建”标记。你可以使用单引号来包含字符串,然后标记中的任何属性都可以使用双引号作为其值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接