2014-12-05 58 views
0

我想刪除命名的html實體,並用它們的數字替換它們。不幸的是,HtmlDecode刪除了兩者。有沒有辦法只刪除指定的?刪除字符串中的命名的HTML實體

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

我想這個輸出

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

@CodeCaster:如果OP解碼然後編碼,它將導致'< div%gt; ....' – 2014-12-05 11:06:13

+0

@Steve當然... – CodeCaster 2014-12-05 11:08:16

回答

2

您可以使用正則表達式查找名爲HTML實體,對它們進行解碼,然後創建數字相當於:

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

如果你想忽略無效的實體,你可以解碼它們,然後檢查它們是否改變,這樣你可以j如果他們沒有留下他們:

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