前面关于显示html文本用了浏览器控件来处理(http://blog.youkuaiyun.com/yysyangyangyangshan/article/details/7454750),这个不过是为了解决燃眉之急不得已才使用。其实最好还是使用正则表达式处理,也就是自己写一个html文本解释器,当然这个实现起来也是不容易的,首先你得将所有html文本标签罗列出来,然后一一翻译。下面先搞一个简单的例子吧。
public static string ConvertToBrowserText(string source)
{
string result = string.Empty;
result = source.Replace("/r", " ");
result = result.Replace("/n", " ");
result = result.Replace("/t", " ");
result = Regex.Replace(result, "(<head>).*(</head>)", string.Empty, RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*script([^>])*>", "<script>", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"(<script>).*(</script>)", string.Empty, RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*style([^>])*>", "<style>", RegexOptions.IgnoreCase);
result = Regex.Replace(result, "(<style>).*(</style>)", string.Empty, RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*td([^>])*>", " ", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*br( )*>", "/r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*li( )*>", "/r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*tr([^>])*>", "/r/r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*p([^>])*>", "/r/r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<[^>]*>", string.Empty, RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"&", "& ", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @" ", " ", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<", "<", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @">", ">", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"&(.{2,6});", string.Empty, RegexOptions.IgnoreCase);
result = Regex.Replace(result, @" ( )+", " ");
result = Regex.Replace(result, "(/r)( )+(/r)", "/r/r");
result = Regex.Replace(result, @"(/r/r)+", "/r/n");
result = Regex.Replace(result, @"/r/n", System.Environment.NewLine);
result = Regex.Replace(result, @"/r", System.Environment.NewLine);
result = Regex.Replace(result, @"/r/r", System.Environment.NewLine);
result = Regex.Replace(result, @"/s", "");
return result;
}
结果:
richtextbox中是正则表达式处理效果,webbrowser是原文本显示效果。
源代码:http://download.youkuaiyun.com/detail/yysyangyangyangshan/4354953