我在博客中使用<pre>
标签来发布代码。我知道我必须将<
更改为<
,将>
更改为>
。还有其他需要转义的字符以正确显示html吗?
我在博客中使用<pre>
标签来发布代码。我知道我必须将<
更改为<
,将>
更改为>
。还有其他需要转义的字符以正确显示html吗?
如果您在博客中使用<pre>
标签来显示HTML标记,会发生什么:
<pre>Use a <span style="background: yellow;">span tag with style attribute</span> to hightlight words</pre>
虽然这段代码可以通过HTML验证,但是否会产生期望的结果呢?不会。正确的方法是:
<pre>Use a <span style="background: yellow;">span tag with style attribute</span> to hightlight words</pre>
另一个例子:如果您使用pre标签来展示其他语言的代码,仍然需要进行HTML编码:
<pre>if (i && j) return;</pre>
这可能会产生预期结果,但它是否通过HTML验证呢?不。正确的方法是:
<pre>if (i && j) return;</pre>
简而言之,对于 pre 标签的内容,与其他标签一样进行 HTML 编码。
&&
。 - Salman Ahtmlspecialchars($html);
(将HTML转义)Element.innerText = "<html>...";
(设置元素文本)请注意<pre>
仅用于样式, 因此您必须转义所有HTML。
<xmp>
标签这并不是很常见,但它确实存在,甚至Chrome仍然支持它。然而,使用一对<xmp>
标签不建议依赖 - 这只是为你的HTML化石,但这是一个非常简单的处理个人内容的方法,例如文档。即使w3.org Wiki在其示例中也说:“不要使用它。”
您可以将任何 HTML(不包括 </xmp>
结束标记)放在 <xmp></xmp>
中。
<xmp>
<html> <br> just any other html tags...
</xmp>
正确的版本可以被视为存储为字符串的HTML,并通过某些转义函数/机制显示。
只需记住一件事 - 在类C语言中,字符串通常在单引号或双引号之间编写 - 如果您用双引号包装字符串=>您应该转义双引号(可能使用\
),如果您用单引号包装字符串=>转义单引号(可能使用\
)...
服务器端脚本语言通常有一些内置函数来转义HTML。
<?php
$html = "<html> <br> or just any other HTML"; //store html
echo htmlspecialchars($html); //display escaped html
?>
ENT_QUOTES
标志:
标志从ENT_COMPAT更改为ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401。
客户端脚本可以采用与服务器端类似的方法。
没有函数,但是如果您设置元素的innerText
或节点的textContent
,则会出现默认行为:
document.querySelector('.myTest').innerText = "<html><head>...";
document.querySelector('.myTest').textContent = "<html><head>...";
HTMLElement.innerText
和Node.textContent
并不是同一件事情!您可以在上面的MDN文档链接中了解更多区别。
jQuery有$jqueryEl.text()
来实现这个目的:
$('.mySomething .test').text("<html><head></head><body class=\"test\">...");
只需记住与服务器端相同的事情-在类C的语言中,转义您包装字符串的引号。
如果您需要在标记中发布代码,我建议使用<code>标签。它的工作方式与pre相同,但会被认为是语义上正确的。
否则,<code>和<pre>只需要对尖括号进行编码即可。
使用这个,不用担心任何问题。
<pre>
${fn:escapeXml('
<!-- all your code -->
')};
</pre>
你需要启用jQuery才能使其正常工作。
>
更改为>
。除非标签已打开,否则>
不会被视为标签结束符号,如果您将<
更改为<
,就没有办法打开标签,因此>
没有特殊含义。但是您需要将&
更改为&
(并且这需要在包括和号的其他更改之前完成)。 - kindall