如何在 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# 中将“=?utf-8?B?...?=”解码为字符串