提问人:splunk 提问时间:5/17/2023 更新时间:5/17/2023 访问量:72
如果 HTML 内容包含 < 和 > 字符,则无法在 Javascript 中使用 DOMParser 验证 HTML 内容
Can't validate HTML content if it contains < and > characters with DOMParser in Javascript
问:
我正在尝试在 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 无效”。
我应该怎么做?
答:
我不会把什么叫做“验证”;相反,它应用了 HTML5 的回退解析规则来达到一个结果——任何结果——希望在浏览器之间保持一致。Note 不是一个有效的、完整的 HTML 文档,因为当输入应该是完整的文档而不是文档片段时,至少需要一个元素(作为其中的一部分可以省略 https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString。HTML 验证的整个过程要复杂得多,并且还取决于您定位的 HTML 版本。您可以阅读有关使用SGML验证HTML的信息。https://validator.w3.org/docs/sgml.html、https://sgmljs.net/docs/parsing-html-tutorial/parsing-html-tutorial.html 和 https://sgmljs.net/docs/html200129.html,您还可以查看 W3C 基于 Java 的 nu 验证器。DOMParser.parseFromString()
<html><div>...</div></html>
<title>
<head>
parseFromString()
无论如何,要回答您的问题,请尝试通过实体引用转义(替换)字符。<
<
评论
'text/html'
<div> 2 < 3 </div>
即使在源文件中也是无效的 HTML,您必须在文本内容中将 s 和 s 写为 HTML 实体,例如 和 .<
>
<
>