首页 > 解决方案 > AngleSharp 结果的 html 编码

问题描述

我正在使用 AngleSharp,当我解析 html 输入时,我从外部 html 中得到了这样的结果:

<p><textarea>one&lt;p&gt;two</textarea></p>

这是我的代码:

string input = "<body><p><textarea>one<p>two";
var parser = new HtmlParser();
var document = parser.Parse(input);
var htmlOutput = document.Body.OuterHtml;

我预计结果将是:

<p><textarea>one</textarea></p><p>two</p>

任何人都可以帮助我!

标签: anglesharp

解决方案


这是官方 HTML 规范中定义的标准行为。标签切换到新的textarea解析状态并且不会自动关闭。它需要遇到textarea关闭标签才能关闭。这种新的解析状态基本上忽略了所有保留字符(例如,<),这导致您看到的序列化表示使用它们的编码值。

所以问题不在于编码(这只是一个序列化表示),而是 textarea 没有关闭,现在将所有(假设?)子项放在 textarea 中作为原始输入。

不幸的是,您在这里无能为力 - 您需要关闭 textarea。所有浏览器(因此规范的初始注释)都以相同的方式看待它 - 所以这不是 AngleSharp 独有的。

HTH!


推荐阅读