html - 在 html 标签属性值中转义

标签 html escaping

我无法理解在 javascript 的 html 标记属性值中转义是如何工作的。

我被引导相信你应该总是转义 & ' "< > 。所以我尝试将 javascript 作为属性值:

<a href="javascript:alert(&apos;Hello&apos;);"></a>

这是行不通的。然而:

<a href="javascript:alert(&#39;Hello&#39;);"></a>

<a href="javascript:alert('Hello');"></a>

适用于所有浏览器!

现在我完全糊涂了。如果我所有的属性值都用双引号括起来,这是否意味着我不必转义单引号?或者 apos 和 ascii 39 在技术上是不同的字符?这样 javascript 需要 ascii 39,但不需要 apos?

最佳答案

这里涉及两种类型的“转义”,HTML 和 JavaScript。解释 HTML 文档时,首先解析 HTML 转义符。

就 HTML 而言,属性值内的规则与其他地方的规则相同,外加一条附加规则:

  • 小于号<应该逃脱。通常&lt;用于此。从技术上讲,根据 HTML 版本,并不总是需要转义,但这一直是一种很好的做法。
  • 符号 &应该逃脱。通常&amp;用于此。这也不总是强制性的,但总是这样做比在需要时学习和记住要简单。
  • 用作属性值周围分隔符的字符必须在其中转义。如果使用 Ascii 引号 "作为分隔符,通常使用 &quot; 来转义它的出现而对于 Ascii 撇号,实体引用 &apos;仅在某些 HTML 版本中定义,因此使用数字引用最安全 &#39; (或 &#x27; )。

你可以逃脱> (或任何其他数据字符)如果你喜欢,但它永远不需要。

在 JavaScript 方面,字符串文字中有一些转义机制(使用 \ )。但这些是不同的问题,与您的情况无关。

在您的示例中,在符合当前规范的浏览器上,JavaScript 解释器看到完全相同的代码 alert('Hello'); .浏览器已“未转义”&apos;&#39;' .听到这个我有点惊讶 &apos;这些天并没有得到普遍支持,但这不是问题:很少需要在 HTML 中转义 Ascii 撇号(仅在属性值内需要转义,并且仅当您使用 Ascii 撇号作为其分隔符时),并且当有, 您可以使用 &#39;引用。

关于html - 在 html 标签属性值中转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187946/

相关文章:

java - MySQL JSON_SEARCH 和 JSON_REPLACE 不转义引号

url - NGINX 将 %2f 转义为正斜杠。我怎样才能阻止它?

python - 在 Python 中将转义字符写入 Csv 文件

php - 用于 Twitter-Bootstrap 联系表单的 JavaScript

javascript - 实现将 iframe 切换到全页屏幕并返回小屏幕的更好方法?

html - 将恶意代码存储在数据库中——输出时转义总是正确的方法吗?

ruby-on-rails - Rails escape_javascript通过转义单引号来创建无效的JSON

javascript - body 需要在视差图像前面

html - 下载属性在 safari 中不起作用

javascript - 单击行在新窗口中打开 div