如果 HTML 内容包含 < 和 > 字符,则无法在 Javascript 中使用 DOMParser 验证 HTML 内容

Can't validate HTML content if it contains < and > characters with DOMParser in Javascript

提问人:splunk 提问时间:5/17/2023 更新时间:5/17/2023 访问量:72

问:

我正在尝试在 Javascript 中构建一个 HTML 编辑器验证器。

下面是检查用户插入的 HTML 是否有效的 JS 代码:

let parser = new DOMParser();
let doc = parser.parseFromString('<html>' + myHTML + '</html>', 'application/xml');
let errorNode = doc.querySelector('parsererror');
if (errorNode) {
  return 'HTML is not valid';
} else {
  return 'HTML is valid';
}

返回“HTML is valid”的示例: ->上面的代码在这里按预期工作

<div>This HTML is valid</div>

返回“HTML is not valid”的示例: ->上面的代码在这里按预期工作

 <div>This HTML is not valid</divv>

相反,在这些情况下,我的代码无法按预期工作。 它将“<”和“>”字符视为 HTML 标记,然后返回错误:

<div> 2 < 3 </div> -> 这是一个有效的 HTML,但上面的代码返回“HTML 无效”。

<div> 4 > 3 </div> -> 这是一个有效的 HTML,但上面的代码返回“HTML 无效”。

我应该怎么做?

javascript html 解析 dom xml-parsing

评论

0赞 Jaromanda X 5/17/2023
尝试使用 MIMETYPE,因为您想解析 HTML ...'text/html'
0赞 Teemu 5/17/2023
<div> 2 < 3 </div>即使在源文件中也是无效的 HTML,您必须在文本内容中将 s 和 s 写为 HTML 实体,例如 和 .<>&lt;&gt;

答:

1赞 imhotap 5/17/2023 #1

我不会把什么叫做“验证”;相反,它应用了 HTML5 的回退解析规则来达到一个结果——任何结果——希望在浏览器之间保持一致。Note 不是一个有效的、完整的 HTML 文档,因为当输入应该是完整的文档而不是文档片段时,至少需要一个元素(作为其中的一部分可以省略 https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString。HTML 验证的整个过程要复杂得多,并且还取决于您定位的 HTML 版本。您可以阅读有关使用SGML验证HTML的信息。https://validator.w3.org/docs/sgml.htmlhttps://sgmljs.net/docs/parsing-html-tutorial/parsing-html-tutorial.htmlhttps://sgmljs.net/docs/html200129.html,您还可以查看 W3C 基于 Java 的 nu 验证器DOMParser.parseFromString()<html><div>...</div></html><title><head>parseFromString()

无论如何,要回答您的问题,请尝试通过实体引用转义(替换)字符。<&lt;