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

#1 楼

您可以使用HttpUtility.HtmlDecode

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

评论


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

–瓦西尔
08/09/23在18:10

在System.Web的.NET 2.0版本中

– Mark Cidade
08/09/23在18:14

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

–瓦西尔
08/09/23在18:23

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

– OwenP
08-09-23在18:26

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

– PeterX
13年5月23日在8:10

#2 楼

在.Net 4.0上:

System.Net.WebUtility.HtmlDecode()


无需为C#项目包括程序集

评论


It is better solution because HttpUtility doesn't decode "'" symbol.. I don't know why..

– RredCat
Sep 13 '11 at 13:44

在开发通用Windows平台时,这是必需的。

–matthewsheets
2015年6月10日19:32

这会在.Net网页中引起XSS吗?

– Senura Dissanayake
18年8月15日在11:53

#3 楼

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

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

现在添加了引用,您应该可以使用标准格式访问方法为System.Web.HttpUtility.HtmlDecode命名using或为System.Web插入q4312079q语句使事情变得更容易。

#4 楼

如果没有服务器上下文(即您离线运行),则可以使用HttpUtility.HtmlDecode。

评论


同意,这就是为什么我使用HttpUtility并陷入同一陷阱= P的原因

– Quintin Robinson
08/09/23在18:07

#5 楼

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

#6 楼

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

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


输出就像

 Svendborg Værft A/S


评论


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

–贾斯汀
17年5月1日在17:51

#7 楼

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

评论


可能没有服务器上下文(例如,在运行测试用例等时):

–Rob Cooper
08-09-23在18:04

#8 楼

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

using System.Web.HttpUtility包含在您的类中

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

           return HttpUtility.HtmlDecode(text);
        }else{

         return text;
        }

    }


#9 楼

对于.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;
        }
    }


#10 楼

For strings containing I've had to double-decode the string. First decode would turn it into the second pass would correctly decode it to the expected character.