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

Posted

技术标签:

【中文标题】如何在 C# 中解码 HTML 字符?【英文标题】:How can I decode HTML characters in C#? 【发布时间】:2021-12-17 19:55:24 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以使用HttpUtility.HtmlDecode

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

【讨论】:

它应该在 System.Web 中,但它不是。我已经有一年多没有接触 C#了,如果我对此感到更加沮丧,我会手动转换它们。 在 System.Web 的 .NET 2.0 版本中 我使用过 System.Web。在我的上下文中,命名空间只有一些 AspPermission 类。 在项目属性中添加对 System.Web.Dll 的引用。您看到的类位于默认引用的 System.dll 中。 如果您尝试解码查询字符串,您需要使用HttpUtility.UrlDecode【参考方案2】:

在 .Net 4.0 上:

System.Net.WebUtility.HtmlDecode()

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

【讨论】:

这是更好的解决方案,因为 HttpUtility 不解码“'”符号..我不知道为什么.. 这是为通用 Windows 平台开发所必需的。 这会导致 .Net 网页中出现 XSS 吗?【参考方案3】:

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

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

既然添加了引用,您应该能够使用完全限定名称 System.Web.HttpUtility.HtmlDecode 访问该方法,或者为 System.Web 插入一个 using 语句以使事情变得更容易。

【讨论】:

【参考方案4】:

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

【讨论】:

同意,这就是我使用HttpUtility的原因,落入了同样的陷阱=P【参考方案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

【讨论】:

'ToString()' 是多余的,因为 HtmlDecode 返回一个字符串【参考方案7】:

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

【讨论】:

可能没有服务器上下文(即在运行测试用例等时)我之前陷入了这个陷阱:)【参考方案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

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

// 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】:

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

【讨论】:

以上是关于如何在 C# 中解码 HTML 字符?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 C# 中将字符串解码为 XML 字符串

如何在 C# 中将“=?utf-8?B?...?=”解码为字符串

如何解码用 JavaScriptStringEncoded 编码的字符串?

如何在ios中解码html数据?

如何在 Swift 中解码 HTML 实体?