0

在 HTML 中的几乎每个标签中,都必须对<(start tag) 和&(character escape) 等字符进行转义。

但是,在<script>标签内部,这似乎并不适用!例如,我可以在 HTML 中明确定义字符并使用 jQuery 检索它们var my_unescaped_text = $('script[type="text/mytexttype"]');

有没有其他标签可以做到这一点?有没有什么方法可以让我在不使用 javascript 的情况下让这种事情在<pre>标签中变得可见?(是的,我知道,这听起来绝对是一项艰巨的任务......)

<input>或者<textarea>标签呢?绝对可以将这些字符写在文本输入字段中,这可见且可样式化的(这满足了我可能不清楚的目标)。还有别的事吗?我试图显示的文本(前 javascript 处理)是 Markdown 并且 a<pre>可能最适合它,尽管 a<textarea readonly="readOnly">可能看起来与<pre>.

4

2 回答 2

0

将任意文本嵌入 HTML 时必须始终转义。

但是,特殊规则适用于<script>标签的内容,它们允许< 在某些条件下未转义,即它不是 a 的一部分</script>"<"因此,在 JavaScript 中正确的编码是"\u003c".

出于安全原因,您首先不应该使用内联 JavaScript。相反,使用data-属性

于 2012-07-14T07:33:05.080 回答
0

转义规则取决于 HTML 版本:XHTML 有自己的规则。决定您将使用哪个版本的 HTML,并从优秀的教程和参考资料中学习其规则。

关于详细问题:

  1. script与本期类似的另一个元素是style. 还有一个非标准但得到良好支持的xmp元素,可用于将 HTML 标记原样呈现为内容。
  2. 不,您不能更改规则,以便例外(当它们适用时)适用pre于例如。
  3. input和元素在这textarea方面并不特殊。您可能被类似的测试误导了<input value="a<b">,它是有效的(XHTML 除外),因为<不需要在属性值中进行转义。或者通过类似 的测试<input value="&">,这是允许的(XHTML 除外),因为&后面没有名称字符。

要显示标记(包括 Markdown),推荐的方法是像往常一样转义每次出现的内容<和内容。&您可以出于其他原因(例如格式或逻辑)使用标记code和/或pre标记,但它们不会影响 HTML 解析或需要转义。如前所述,还有xmp,它类似于pre但不识别元素内的标记,将所有内容视为文本,除了结束标记</xmp>;但是同事、老板或老师可能会因为你使用它而责骂你。

于 2012-07-14T08:26:01.433 回答