程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#小軟件(SaveClassic)開發手記--(3)基礎類(HTML操作類HtmlOption)

c#小軟件(SaveClassic)開發手記--(3)基礎類(HTML操作類HtmlOption)

編輯:C#入門知識

 

我開發的時小型日志程序,保存日志文件到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;

 

            //提取字符串的圖片 www.2cto.com

 

            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字符,保存圖片到本地,並修改其中圖片路徑等功能

作者 zhaoyang

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved