如何在C#中解码HTML字符?


How can I decode HTML characters in C#?

我有用HTML字符实体编码的电子邮件地址。.NET中有什么可以将它们转换为纯字符串的吗?


你可以用HttpUtility.HtmlDecode

如果您使用的是.NET 4.0+,那么也可以使用WebUtility.HtmlDecode,因为它在System.Net命名空间中可用,因此不需要额外的程序集引用。


在.NET 4.0上:

1
System.Net.WebUtility.HtmlDecode()

不需要包含C项目的程序集


正如@cq所说,您需要使用httputility.htmldecode,但默认情况下,它在非ASP.NET项目中不可用。

对于非ASP.NET应用程序,需要添加对System.Web.dll的引用。右键单击解决方案资源管理器中的项目,选择"添加引用",然后浏览System.Web.dll的列表。

现在添加了引用,您应该能够使用完全限定名System.Web.HttpUtility.HtmlDecode访问该方法,或者插入System.Webusing语句,以使操作更简单。


如果没有服务器上下文(即脱机运行),则可以使用httputility.htmldecode。


要解码HTML,请看下面的代码

1
2
3
string s ="Svendborg Værft A/S";
string a = HttpUtility.HtmlDecode(s);
Response.Write(a);

输出就像

1
 Svendborg V?rft A/S


使用Server.HtmlDecode对HTML实体进行解码。如果您想退出HTML,即向用户显示<>字符,请使用Server.HtmlEncode


同样值得一提的是,如果你像我一样使用htmlagilitypack,你应该使用HtmlAgilityPack.HtmlEntity.DeEntitize()。它需要一个string并返回一个string


对于.NET 4.0

using System.Net;的项目中添加对System.net.dll的引用,然后使用以下扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Html encode/decode
    public static string HtmDecode(this string htmlEncodedString)
    {
        if(htmlEncodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlDecode(htmlEncodedString);
        }
        else
        {
            return htmlEncodedString;
        }
    }

    public static string HtmEncode(this string htmlDecodedString)
    {
        if(htmlDecodedString.Length > 0)
        {
            return System.Net.WebUtility.HtmlEncode(htmlDecodedString);
        }
        else
        {
            return htmlDecodedString;
        }
    }

将一个方法写入某个实用程序类,该实用程序类接受字符串作为参数,并返回解码后的HTML字符串。

using System.Web.HttpUtility加入你的班级

1
2
3
4
5
6
7
8
9
10
11
public static string HtmlEncode(string text)
    {
        if(text.length > 0){

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }