AkaneMail.Mail.HtmlToText C# (CSharp) Method

HtmlToText() public static method

HTMLからタグを取り除く
public static HtmlToText ( string htmlBody, string mailHeader ) : string
htmlBody string HTML本文
mailHeader string メールヘッダ
return string
        public static string HtmlToText(string htmlBody, string mailHeader)
        {
            string codeName;        // 文字コード名
            string bodyCodeName;    // HTMLの文字コード名

            // メールヘッダの文字コードを取得する
            codeName = ParseEncoding(mailHeader);

            // metaタグから正規表現で文字コードを取り出す
            Regex regEnc = new Regex("<meta.*?charset=(?<encode>.*?)\".*?>", RegexOptions.IgnoreCase | RegexOptions.Singleline);

            // regEncにマッチする文字列を検索
            Match m = regEnc.Match(htmlBody);

            // HTML本文の中でcharset=文字コード名がマッチしたとき
            if(m.Success == true){
                // HTMLの文字コード名を取得する
                bodyCodeName = m.Groups["encode"].Value;
                // メールヘッダの文字コードとHTMLの文字コードが同じとき
                if(codeName.ToLower() == bodyCodeName.ToLower()){
                    // HTMLの文字コードで変換する
                    Byte[] b = Encoding.GetEncoding(bodyCodeName).GetBytes(htmlBody);
                    htmlBody = Encoding.GetEncoding(bodyCodeName).GetString(b);
                }
                else{
                    // 文字コードが異なる場合はメールヘッダの文字コードで変換する
                    Byte[] b = Encoding.GetEncoding(codeName).GetBytes(htmlBody);
                    htmlBody = Encoding.GetEncoding(codeName).GetString(b);
                }
            }
            else{
                // htmlBody内にcharset指定が存在しないときは
                // メールヘッダの文字コードで変換する
                Byte[] b = Encoding.GetEncoding(codeName).GetBytes(htmlBody);
                htmlBody = Encoding.GetEncoding(codeName).GetString(b);
            }

            // 正規表現の設定(<script>, <noscript>)
            Regex re1 = new Regex("<(no)?script.*?script>", RegexOptions.IgnoreCase | RegexOptions.Singleline);

            // 正規表現の設定(<style>)
            Regex re2 = new Regex("<style.*?style>", RegexOptions.IgnoreCase | RegexOptions.Singleline);

            // 正規表現の設定(すべてのタグ)
            Regex re3 = new Regex("<.*?>", RegexOptions.Singleline);

            // タグを取り除く
            htmlBody = re1.Replace(htmlBody, "");
            htmlBody = re2.Replace(htmlBody, "");
            htmlBody = re3.Replace(htmlBody, "");

            // 変換できなかった特殊文字を個別置換
            htmlBody = htmlBody.Replace("&nbsp;", " ");
            htmlBody = htmlBody.Replace("&shy;", " ");
            htmlBody = htmlBody.Replace("&lt;", "<");
            htmlBody = htmlBody.Replace("&gt;", ">");
            htmlBody = htmlBody.Replace("&amp;", "&");
            htmlBody = htmlBody.Replace("&quot;", "\"");
            htmlBody = htmlBody.Replace("&copy;", "(c)");
            htmlBody = htmlBody.Replace("&reg;", "(R)");
            htmlBody = htmlBody.Replace("&trade;", "TM");
            htmlBody = htmlBody.Replace("\r\n\r\n\r\n\r\n", "");

            return htmlBody;
        }