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


397

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

Answers:


618

您可以使用 HttpUtility.HtmlDecode

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


1
它应该在System.Web中,但事实并非如此。我已经有一年没有碰过C#了,如果对此感到沮丧,我将手动进行转换。
Vasil

1
它位于System.Web的.NET 2.0版本中
Mark Cidade,

1
我已经在使用System.Web。在我的上下文中,名称空间只有一些AspPermission类。
Vasil

17
在项目属性中添加对System.Web.Dll的引用。您看到的类实时存在于默认引用的System.dll中。
OwenP

11
如果您尝试解码查询字符串,则需要使用HttpUtility.UrlDecode
PeterX


43

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

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

现在已经添加了引用,您应该可以使用完全限定的名称来访问该方法,System.Web.HttpUtility.HtmlDecode或者插入一个using语句System.Web以使事情变得更容易。



7

使用Server.HtmlDecode的HTML实体解码。如果要转义 HTML,即向用户显示<>字符,请使用Server.HtmlEncode


4
可能没有服务器上下文(即,在运行测试用例等时),我之前曾陷于此陷阱:)
Rob Cooper

7

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

string s = "Svendborg V&#230;rft A/S";
string a = HttpUtility.HtmlDecode(s);
Response.Write(a);

输出就像

 Svendborg Værft A/S

2
由于HtmlDecode返回一个字符串,因此'ToString()'是多余的
Justin

6

还值得一提的是,如果您像以前一样使用HtmlAgilityPack,则应使用HtmlAgilityPack.HtmlEntity.DeEntitize()。它需要a string并返回a string


1

将方法静态写入某些实用工具类,该工具类接受string作为参数并返回解码的html字符串。

using System.Web.HttpUtility纳入课程

public static string HtmlEncode(string text)
    {
        if(text.length > 0){

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }

1

对于.net 4.0

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

// 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;
        }
    }

0

对于包含&#x20;的字符串 我不得不对字符串进行双解码。第一次解码会将其转换为第二遍,并将其正确解码为预期字符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.