using System;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.IO.Compression; namespace HuaTong.General.Utility
{
/// <summary>
/// html内容处理
/// </summary>
public static class HtmlHelper
{
/// <summary>
/// 纯文本转HTML
/// </summary>
public static string TextToHTML(string value)
{
return TextToHTML(value, false, false);
}
/// <summary>
/// 纯文本转HTML
/// </summary>
public static string TextToHTML(string value, bool isHasEmptyRow)
{
return TextToHTML(value, isHasEmptyRow, false);
}
/// <summary>
/// 纯文本转HTML
/// </summary>
public static string TextToHTML(string value, bool isHasEmptyRow, bool isOutBr)
{
StringBuilder sr = new StringBuilder();
if (isHasEmptyRow)
{
sr.Append(StringHelper.RemoveEmptyRow(value));
}
else
{
sr.Append(value);
} sr.Replace("&", "&amp;");
sr.Replace(">", "&gt;");
sr.Replace("<", "&lt;");
sr.Replace(" ", "&nbsp;");
sr.Replace("\"", "&quot;");
sr.Replace("©", "&copy;");
sr.Replace("®", "&reg;");
sr.Replace("×", "&times;");
sr.Replace("÷", "&divide;");
if (isOutBr)
{
sr.Replace("\r\n", "<br>");
sr.Replace("\r", "<br>");
sr.Replace("\n", "<br>");
}
else
{
sr.Insert(, "<p>");
sr.Replace("\r\n", "\r");
sr.Replace("\r", "</p>\r\n<p>");
sr.Append("</p>");
} return sr.ToString();
} /// <summary>
/// HTML输出为JS
/// </summary>
public static string HtmlToScript(string value)
{
StringBuilder sr = new StringBuilder();
sr.Append(value);
sr.Replace("\\", "\\\\");
sr.Replace("/", "\\/");
sr.Replace("'", "\\'");
sr.Replace("\"", "\\\"");
string[] strs = sr.ToString().Split(new char[] { '\r', '\n' },
StringSplitOptions.RemoveEmptyEntries); return String.Format("document.writeln(\"{0}\");",
String.Join("\");\r\ndocument.writeln(\"", strs),
StringSplitOptions.RemoveEmptyEntries);
} /// <summary>
/// JS脚本输出字符串
/// </summary> /// <returns></returns>
public static string ScriptStringFormat(string value)
{
value = value.Replace("\\", "\\\\");
value = value.Replace("'", "\\'");
value = value.Replace("\"", "\\\"");
return value;
} /// <summary>
/// HTML转纯文本
/// </summary>
public static string HtmlToText(string value)
{
string regexstr = @"(&(#)?.+;)|(<[^>]*>)";
return Regex.Replace(value, regexstr, "", RegexOptions.IgnoreCase);
} /// <summary>
/// 过滤HTML中的不安全标签
/// </summary>
public static string HtmlFilter(string value)
{
value = Regex.Replace(value, @"(\<|\s+)o([a-z]+\s?=)", "$1$2", RegexOptions.IgnoreCase);
value = Regex.Replace(value, @"(select|textarea|input|link|iframe|frameset|frame|form|applet|embedlayer|ilayer|meta|object|script|behavior|style)([\s|:|>])+", "$1.$2", RegexOptions.IgnoreCase);
value = Regex.Replace(value, @"javascript|eval", "", RegexOptions.IgnoreCase);
return value;
} /// <summary>
/// 获取源代码
/// </summary>
public static string GetHtmlContent(string url, string encoding)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
StreamReader reader = null;
try
{
request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = ;
request.AllowAutoRedirect = false;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
if (response.ContentEncoding != null && StringHelper.IsEqualString(response.ContentEncoding,"gzip"))
reader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress), Encoding.GetEncoding(encoding));
else
reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string html = reader.ReadToEnd();
return html;
}
}
catch
{
}
finally
{
if (response != null)
{
response.Close();
response = null;
}
if (reader != null)
reader.Close();
if (request != null)
request = null;
}
return string.Empty;
}
/// <summary>
/// 获取HTML网页的编码
/// </summary> /// <returns></returns>
public static string GetEncoding(string url)
{
string charset = string.Empty;
HttpWebRequest request = null;
HttpWebResponse response = null;
StreamReader reader = null;
try
{
request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = ;
request.AllowAutoRedirect = false;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK && response.ContentLength < * )
{
if (response.ContentEncoding != null && StringHelper.IsEqualString(response.ContentEncoding, "gzip"))
reader = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress));
else
reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII);
string html = reader.ReadToEnd();
Regex reg_charset = new Regex(@"charset\b\s*=\s*(?<charset>[^""]*)");
if (reg_charset.IsMatch(html))
{
return reg_charset.Match(html).Groups["charset"].Value;
}
else if (response.CharacterSet != string.Empty)
{
return response.CharacterSet;
}
else
return Encoding.Default.BodyName;
}
}
catch
{
}
finally
{
if (response != null)
{
response.Close();
response = null;
}
if (reader != null)
reader.Close();
if (request != null)
request = null;
}
return Encoding.Default.BodyName;
}
}
}

最新文章

  1. 关于在linux中使用图形界面的网络管理工具
  2. kthread_run【转】
  3. Lua查找表元素过程(元表、__index方法是如何工作的)
  4. Java删除数据库中的数据
  5. javascript设计模式实践之策略模式--输入验证
  6. SQL Server DBA日常运维语句
  7. 在centos上安装mysql5.7的三种方法
  8. Linq to Xml示例
  9. jQuery 、js 设置 显示隐藏
  10. dos下循环复制一张图片的bat
  11. springdata+redis配置详解
  12. smarty fetch方法
  13. BZOJ 3990: [SDOI2015]排序 [搜索]
  14. sql语句查询执行顺序
  15. [转]【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)
  16. 《ASP.NET Core In Action》读书笔记系列一 ASP.NET Core 的诞生
  17. C# 8.0 抢先看-- Async Stream
  18. 快速排序中的partition.
  19. Windows安装mapnik
  20. SQLServer xp_instance_regread returned error 5,Access is denied(配置最小权限)

热门文章

  1. python 切换工作路径 为指定文件夹
  2. TCP/IP的相关协议
  3. 源码编译PHP提示zip错误
  4. 拓扑排序(dfs)
  5. mybatis中的懒加载
  6. docker 修改 mysql 5.7 sql_mode
  7. LeetCode——remove-duplicates-from-sorted-list
  8. db2快照
  9. python print和strip
  10. 2018 ICPC北京 H ac自动机