如何正确转义<option>标签内的文字?

时间:2016-10-31 00:57:41

标签: html escaping option

将不受信任的文本插入HTML文档时,必须转义某些特殊字符(例如&lt;,&amp;,&#34;等)。 (&#34;用于引用属性)。例如:

<div>Some tags are &lt;b&gt; and &lt;div&gt;</div>

变为:

<option>&lt;&sol;option&gt;</option>

(人们可以辩论对&amp; gt;的需求,但这里没有相关性。)

这很棒,但在选项标签内呢?如果我希望文字为&#34;&lt; / option&gt;&#34;,我该怎么做?

这不起作用:

{{1}}

我发现HTML字符实体(&amp; lt;,&amp; gt;等)被删除。我已经尝试过Chrome和Firefox。我假设这与选项标签不能包含嵌套标签的事实有关。谷歌在这方面让我失望。 :(

以及相关问题:自&lt; option&gt;具有特殊的转义行为,如上所示,我们知道&lt; script&gt;有自己的行为。是否存在具有特殊转义行为的所有HTML标记的某个完整列表以及有哪些规则?

感谢。

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,如下面的代码段所示,您可以完全转义<option>标记内的HTML实体(在Firefox,Chrome和Safari上测试)。

因此,您可以在选项标记内包含文本</option>。这是使用代表<>字符

的HTML实体完成的

基本上它与:

相同
<option></option></option>

虽然中间</option>不被视为结束标记,但它在浏览器中以这种方式显示

作为旁注,转义字符时使用<option>标记的唯一限制在于:before:after CSS伪元素。 W3建议您不能使用这些伪元素在<option>标记之前添加/附加内容。虽然出于某种原因,在Firefox 48中这确实有用

#css-option:before {
  content: "any text";
}
<select>
  <option>&lt;/option&gt;</option>
  <option>&#60;/option&#62;</option>
  <option>&lt;&sol;option&gt;</option>
  <option id="css-option"></option>
</select>