删除字符串中的命名HTML实体

时间:2014-12-05 10:50:23

标签: c#

我想删除命名的html实体,并用它们的数字等价物替换它们。不幸的是,HtmlDecode删除了两者。有没有办法只删除指定的?

var cats = "<div>&#160;</div> <p>&#65279;&beta;</p>";
cats = HttpUtility.HtmlDecode(cats);

我想要这个输出

<div>&#160;</div> <p>&#65279;&#914;</p>

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式查找指定的HTML实体,对其进行解码,然后创建等效的数字:

cats = Regex.Replace(cats, @"(&[A-Za-z]+;)", m => {
  return "&#" + ((int)HttpUtility.HtmlDecode(m.Value)[0]) + ";";
});

如果你想忽略那些无效的实体,你会解码它们,然后检查它们是否发生了变化,这样你就可以离开它们,如果它们没有:

cats = Regex.Replace(cats, @"(&[A-Za-z]+;)", m => {
  string decoded = HttpUtility.HtmlDecode(m.Value);
  return decoded != m.Value ? "&#" + ((int)decoded[0]) + ";" : m.Value;
});