如何转义单引号?

231

在 HTML 中如何转义单引号 ' ?

这是我正在尝试使用它的地方:

<input type='text' id='abc' value='hel'lo'>

以上代码的结果是在文本框中填充了"hel"。我尝试用\'替换',但得到的仍然是同样的结果。

<input type='text' id='abc' value='hel\'lo'>

上述代码的结果是将“hel”填充到文本框中。

我该如何成功地转义单引号?


嘿,Ravi,这更像是一个HTML问题。我已将问题重新标记为HTML,但您可能需要在您的问题中进行更改。 - Benjamin Manns
9个回答

416
您可以使用HTML实体来表示特殊字符:
  • &#39; 表示 '
  • &#34; 表示 "
  • ...
想了解更多,您可以查看 HTML中的字符实体引用

41
为什么应该在属性值中使用双引号? - Gumbo
5
XML也允许在属性值中使用单引号(请参见http://www.w3.org/TR/xml/#NT-AttValue)。 - Gumbo
4
@Gumbo:哇!我从未见过任何使用单引号包围属性值的XML文档,所以我认为这实际上是无效的。在回答问题时,我又学到了一些东西。感谢这些评论! - Pascal MARTIN
5
我知道这很老旧,但我认为值得注意的是,"有一个HTML实体:&quot; - daiscog
1
@Pascal,w3c验证器显示单引号在属性中是有效的。请参见https://dev59.com/nnE95IYBdhLWcg3wrPwn - ChrisJJ
显示剩余6条评论

76

哇,我好久没写这个了。谢谢你提醒我 - 我已经更新了 W3C 和 WebPlatform.org 上两个表格的链接。 - Benjamin Manns
除了在VXML <var>表达式属性中需要进一步转义之外,这些工作“无处不在”,因为在VXML <var>中,字符串变量值表示为属性定义的普通双引号内的单引号:<var name="myvar" expr="'hel\'lo'" />。 - Steve Cohen

10

由于你处于HTML上下文中,你需要使用HTML来表示该字符。对于HTML,你需要使用数字字符引用&#39; (&#x27; 十六进制):

<input type='text' id='abc' value='hel&#39;lo'>

但我不明白你所说的“HTML上下文”是什么意思? - coding_idiot
@coding_idiot 看一下HTML解析器在解析过程中可能遇到的不同标记。每个状态都有不同的解析规则,这些规则是基于输入触发的。并非每个状态都允许字符引用。现在,如果你看一下属性值(单引号),你会发现&表示字符引用的开始。 - Gumbo

8

将其表示为文本实体(ASCII 39):

<input type='text' id='abc' value='hel&#39;lo'>

6

可能最简单的方法:

<input type='text' id='abc' value="hel'lo">

0
如果由于某些原因您无法转义撇号字符并且无法将其更改为HTML实体(在我的情况下,这是针对特定Vue.js属性的),则可以使用replace将其更改为UTF-8字符集中的不同撇号字符。例如:
ʼ - U+02BC
 - U+2019

这是解决问题的有效方法,我经常这样做。我只是直接粘贴字符。 - Savage
如果有可能,我会尽量避免这种情况,并尝试修复潜在的问题。这可能会导致意想不到的问题。例如,如果用户想要包含代码示例,则更改字符将导致复制和粘贴代码示例的用户感到困惑。 - Flimm

0

我个人认为命名的 HTML 实体更容易记忆:

  • &apos; 表示 '(也称为单引号或撇号,Unicode 字符 U+0027
  • &quot; 表示 "(也称为双引号或引号,Unicode 字符 U+0022

演示:

&apos;
<br>
&quot;


-1
你可以尝试使用:&#145;

-2

使用 JavaScript 内置函数 escape 和 unescape

例如:

var escapedData = escape("hel'lo");   
output = "%27hel%27lo%27" which can be used in the attribute.

again to read the value from the attr

var unescapedData = unescape("%27hel%27lo%27")
output = "'hel'lo'"

如果你有大量的JSON字符串数据需要用于属性,这将非常有帮助。


“escape” 不是 Unicode 安全的。规范建议不要使用它。 - Quentin
escape已被弃用。此外,这里需要的不是那种类型的转义,我们正在尝试将'转义为HTML实体,例如&apos;&#39;,而不是进行百分比编码,这具有不同的用例。 - Flimm

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