zoukankan      html  css  js  c++  java
  • c#小软件(SaveClassic)开发手记(3)基础类(HTML操作类HtmlOption)

    我开发的时小型日志程序,保存日志文件到HTML中,对文件的操作是必然,所有对HTML的操作我编写了一个文件操作类HtmlOption

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Text.RegularExpressions;

    using System.Net;

    namespace Common

    {

        public class HtmlOption

        {

            public HtmlOption()

            {

            }

    //该方法是提取HTML中的图片地址,返回的多个图片地址用逗号分开。为什么要提取HTML中的图片地址?因为我要把网页或部分内容保存到本地,HTML中的图片是存放的图片地址,而不是图片的二进制代码,所以我必须把文件保存到本地,地址是必须知道的才能保存图片文件到本地,然后替换HTML中的图片地址为本地路径,才能实现在本地显示HTML图片在没有网络的情况下正常显示图片。

            public static string HtmImage(string htmlstring)

            {

                Regex regTag = new Regex(@"<[^>]*>");

                Regex regImg = new Regex(@"(?i)<img[^>]*?src=(['""]?)(?<src>[^'""\s>]+)\1[^>]*>");

                string result = regTag.Replace(htmlstring, delegate(Match m) { if (m.Value.ToLower().StartsWith("<img")) return regImg.Replace(m.Value, "《img src=\"${src}\"》《/img》"); return ""; });

                return result;

            }

     

    //该方法功能实现HTML转化成文本字符串,但是要保留图片的代码。这样做的目的是过滤一些HTML中的特殊HTML代码,但是还能正常显示图片。过滤HTML代码的好处,编写自己的CSS样式来美化自己的日志文件。不但开起来美观,有时候也能保护自己的眼睛,增加阅读兴趣。

            public static string HtmlToString(string Htmlstring, string websiteUrl, string PicPath)

            {

                Htmlstring = Htmlstring.Replace("<br>", "\r\n");

                Htmlstring = Htmlstring.Replace("<BR>", "\r\n");

                Htmlstring = Regex.Replace(Htmlstring, @"(<script)+[^<>]*>[^\0]*(<\/script>)+", "", RegexOptions.IgnoreCase);

                Htmlstring = Htmlstring.Replace("《", "\"");

                Htmlstring = Htmlstring.Replace("》", "\"");

                Htmlstring = HtmImage(Htmlstring);

                Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);

                Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);

                Htmlstring = Htmlstring.Replace("<", "");

                Htmlstring = Htmlstring.Replace(">", "");

                Htmlstring = Htmlstring.Replace("\r\n", "<br>");

                Htmlstring = Htmlstring.Replace("<script></script>", "");

                Htmlstring = Htmlstring.Replace("《", "<");

                Htmlstring = Htmlstring.Replace("》", "/>");

                Htmlstring = SavePic(Htmlstring,websiteUrl,PicPath);

                return Htmlstring;

            }

    //该方法实现把远程的图片保存到本地,以时间命名保存图片,并修改Html中的图片路径为本地相对路径,来完成本地显示日志内容。

            /// <summary>

            /// 保存远程图片到本地

            /// </summary>

            /// <param name="htmlstring">要修改的HTML字符串</param>

            /// <param name="websiteUrl">网站主域名</param>

            /// <param name="PicPath">保存图片的路径</param>

            /// <returns>返回处理过后的HTML字符串</returns>

            public static string SavePic(string htmlstring,string websiteUrl,string PicPath)

            {

                System.Text.RegularExpressions.MatchCollection m;

                //提取字符串的图片

                m = Regex.Matches(htmlstring, "(<img).*?>");

                for (int i = 0; i < m.Count; i++)

                {

                    string ostr = m[i].ToString();

                    //提取图片的地址

                    System.Text.RegularExpressions.MatchCollection m2;

                    m2 = Regex.Matches(ostr, "(src=)['|\"].*?['\"]");

                    for (int j = 0; j < m2.Count; j++)

                    {

                        string picurl = m2[j].ToString();

                        picurl = picurl.Replace("src=", "");

                        picurl = picurl.Replace("\"", "");

                        picurl = picurl.Replace("'", "");

                        string picname = DateTime.Now.ToString("yyyMMddHHmmss") + picurl.Substring(picurl.Length - 4, 4);

                        string newpic = "";

                        if (picurl.Substring(0, 4) != "http")

                        {

                            newpic = websiteUrl + "/" + picurl;

                        }

                        else

                        {

                            newpic = picurl;

                        }

                        try

                        {

                            WebClient wc = new WebClient();

                            wc.DownloadFile(newpic, PicPath + @"\" + picname);

                            htmlstring = htmlstring.Replace(newpic, @"pic/" + picname);

                        }

                        catch (Exception ex)

                        {

                        }

                        

                    }

                }

                return htmlstring;

            }

        }

    }

    该类基本就是我们对HTML的处理操作代码,其主要是过滤HTML字符,保存图片到本地,并修改其中图片路径等功能。

  • 相关阅读:
    [Lydsy1706月赛]大根堆
    某考试 T1 Function
    [SHOI2016] 随机序列
    某考试 T1 至危警告
    某考试 T2 yja
    bzoj1880 [Sdoi2009]Elaxia的路线
    bzoj1804 [Ioi2007]Flood 洪水
    bzoj4546 codechef XRQRS
    bzoj4547 小奇的集合
    bzoj1443 [JSOI2009]游戏Game
  • 原文地址:https://www.cnblogs.com/studyplay/p/2280172.html
Copyright © 2011-2022 走看看