解码所有HTML实体

25

我正在寻找一个函数,可以解码大量的HTML实体。

原因是我正在编写一些代码,将HTML内容转换为纯文本。问题在于,许多实体不能使用HttpUtility.HtmlDecode进行转换。

我关心的一些实体示例包括  、& 和 ©。

这是针对 .net 3.5 的。


1
我转向了 .Net 3.5 并使用了 Console.WriteLine(HttpUtility.HtmlDecode(" , &, ©"));,对我来说它很好用。我想不出你为什么会遇到麻烦。你的字符串编码有问题吗? - John Gibb
2个回答

37

那么也许您需要使用 HttpUtility.HtmlDecode 方法。它应该可以工作,您只需要添加对 System.Web 的引用。 至少在 .Net Framework < 4 中是这样的。

例如以下代码:

MessageBox.Show(HttpUtility.HtmlDecode("&amp;&copy;"));

代码正常工作,输出结果如预期(包含&符号和版权符号)。您确定问题出在HtmlDecode而不是其他地方吗?

更新:另一个可以完成这项工作的类,WebUtility(同样是HtmlDecode方法),出现在较新版本的.Net中。然而,似乎存在一些问题。请参阅HttpUtility vs. WebUtility 问题。


你是正确的,问题出在我对结果的使用上,如果我将它放入一个 asp:label 中,它会将版权符号转换为 ©。 - Matthew
我明白了。知道这个还是挺有用的 :). - Pavel Donchev
如果使用js的encodeURI(),请使用HttpUtility.UrlDecode() - chris c

23

使用 .Net 4 中包含的 WebUtility.HtmlDecode 方法。

例如,在控制台应用程序中运行以下代码:

  Console.WriteLine(WebUtility.HtmlDecode("&nbsp;, &amp;, &copy;"));

我得到的是, &, c


1
我可能应该说这是针对 .net 3.5 的。虽然我给你点了赞,但还是非常感谢你。 - Matthew
WebUtility和HttpUtility的HtmlDecode方法有什么区别? - crush
这里有一个答案: https://dev59.com/vWQm5IYBdhLWcg3wxBRg简而言之 - WebUtility是WinRT的一部分,它是较新的,而HttpUtility是旧的(在许多地方都使用,因此我希望它能保留)。 此外,我认为WebUtility位于System.dll(System.Net)中,这使得它对WinApps更加可访问(如果我记得正确的话,您不必依赖于System.Web)。 - Pavel Donchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接