public static string Clean(string source)
{
string withoutLineBreaks = Regex.Replace(source, "\n", string.Empty);
string withParagraphBreaks = Regex.Replace(withoutLineBreaks, "</?(p|br|div) *[^>]*>", "\n");
string tagsRemoved = Regex.Replace(withParagraphBreaks, "<[^>]*>", string.Empty);
string removeCrs = Regex.Replace(tagsRemoved, "\r", string.Empty);
string multiLineBreaksRemoved = Regex.Replace(removeCrs, "\n+", "\n");
string leadingLineBreakRemoved = Regex.Replace(multiLineBreaksRemoved, "^\n", string.Empty);
string trailingLineBreakRemoved = Regex.Replace(leadingLineBreakRemoved, "\n$", string.Empty);
// conversion for &...; s
return HttpUtility.HtmlDecode(trailingLineBreakRemoved);
}