根据URL提取页面的Title,根据网页的charset自动判断Encoding

using System;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

internal class Program
{
    // 获取网页的HTML内容,根据网页的charset自动判断Encoding
    public static string GetHtml(string url)
    {
        return GetHtml(url, null);
    }

    // 获取网页的HTML内容,指定Encoding
    private static string GetHtml(string url, Encoding encoding)
    {
        byte[] buf = new WebClient().DownloadData(url);
        if (encoding != null) return encoding.GetString(buf);
        string html = Encoding.UTF8.GetString(buf);
        encoding = GetEncoding(html);
        if (encoding == null || encoding == Encoding.UTF8) return html;
        return encoding.GetString(buf);
    }

    // 根据网页的HTML内容提取网页的Encoding
    private static Encoding GetEncoding(string html)
    {
        string pattern = @"(?i)\bcharset=(?<charset>[-a-zA-Z_0-9]+)";
        string charset = Regex.Match(html, pattern).Groups["charset"].Value;
        try
        {
            return Encoding.GetEncoding(charset);
        }
        catch (ArgumentException)
        {
            return null;
        }
    }

    // 根据网页的HTML内容提取网页的Title
    private static string GetTitle(string html)
    {
        string pattern = @"(?si)<title(?:\s+(?:""[^""]*""|'[^']*'|[^""'>])*)?>(?<title>.*?)</title>";
        return Regex.Match(html, pattern).Groups["title"].Value.Trim();
    }

    // 打印网页的Encoding和Title
    private static void PrintEncodingAndTitle(string url)
    {
        string html = GetHtml(url);
        Console.WriteLine("[{0}] [{1}]", GetEncoding(html), GetTitle(html));
    }

    // 程序入口
    private static void Main()
    {
        PrintEncodingAndTitle("http://www.msdn.net/");
        PrintEncodingAndTitle("http://www.cnblogs.com/");
        PrintEncodingAndTitle("http://www.cnblogs.com/skyiv/");
        PrintEncodingAndTitle("http://www.csdn.net/");
        PrintEncodingAndTitle("http://news.163.com/");
    }
}

/* 程序输出:
[] [MSDN: Microsoft Developer Network]
[System.Text.UTF8Encoding] [博客园 - 程序员的网上家园]
[System.Text.UTF8Encoding] [空间/IV - 博客园]
[System.Text.UTF8Encoding] [CSDN.NET - 中国最大的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台]
[System.Text.DBCSCodePageEncoding] [新闻中心_网易新闻]

*/

转自:http://www.cnblogs.com/skyiv/archive/2008/06/08/1215983.html

时间: 2024-09-18 05:27:54

根据URL提取页面的Title,根据网页的charset自动判断Encoding的相关文章

为什么我的网站每个页面的title都是一样的?

问题描述 为什么我的网站每个页面的title和关键词都是一样的?怎么改成不一样的?高手指点,谢谢! 解决方案 解决方案二:改head中的title你是不是用了母版页?解决方案三:好像是,别人帮我做的,如果是母版页怎么处理?解决方案四:用母版页就别在母版页里加title喽,title写到子页面里默认母版页有在head里留个placeholder的解决方案五:用数据表里的一个字段信息代替,比如说是新闻的,那就应该把每条新闻的标题当做网页的标题比较恰当一些解决方案六:直接子页面后台,this.titl

异域怎么取 iframe 里页面的title

问题描述 异域怎么取 iframe 里页面的title 异域怎么取 iframe 里页面的title Asp做的网站 解决方案 嵌入进来后就是一堆html,你用JavaScript根据id啥的取就行了 解决方案二: 首先要拿到这个iframe 然后再通过iframe取到他的title 具体:var ifr = document.getElementById('ifr'); var win = ifr.window || ifr.contentWindow; // 考虑兼容性问 win.find(

asp采集数据并自动判断网页编码并转换

在做采集的朋友就会知道经常会碰到采集过来的内容是乱码,下面我们就来看一篇关于asp教程采集数据并自动判断网页编码并转换吧. <%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <

c# webbrowser如何获取新跳转页面的URL?

问题描述 c# webbrowser如何获取新跳转页面的URL? 请问如何获取WEBBROWSER控件跳转的新的URL呢? 假如是百度点进去搜索,那么如何获取跳转的URL呢? 如果是普通的文字链接又要怎么获取呢? 求大大给个例子哈 解决方案 要保留旧窗口的话要去把旧的页面的链接的target改成_blank 在本程序打开新窗口要访问控件的COM接口去抓DWebBrowserEvents ::NewWindow2事件,这个WPF封得太严办不到,得用WinForms的. 解决方案二: 在加载完成后w

如何获取用window.open方法打开的页面的url

问题描述 如何获取用window.open方法打开的页面的url在网站A一页面B(如www.testa.com/test.aspx)用window.open打开另一网站B的页面如:http://www.test.com/test.aspx怎样获在B站页面获取取到网站A的url 解决方案 解决方案二:没人答吗!自顶解决方案三:window.opener.location解决方案四:To:levenwood这样取出的值是空的!因为不是在同一个域下解决方案五:this.Page.RegisterSta

跨域取子页面的dom-父页面操作子页面的dom,通过子页面的URL怎么做

问题描述 父页面操作子页面的dom,通过子页面的URL怎么做 appcan.ready(function() { titHeight = $('#header').offset().height; content = $('#reply').offset().height; var url = "http://192.168.1.195/jc6/wfAndroidHtml/knowledge2.html?UserCode=xiaoyujie%24356a192b7913b04c54574d18c

url-给一个页面的URL 如何通过JQUERY获取 这个页面中的最大的一张图片

问题描述 给一个页面的URL 如何通过JQUERY获取 这个页面中的最大的一张图片 给一个页面的URL 如何通过JQUERY获取 这个页面中的最大的一张图片 1.需要先通过JS加载出这个URL获取来的页面的HTML,存放在一个对象中? 2.再从这个对象中取出其中所有的图片,再做比较 首先第一步怎么实现? 然后第二步 解决方案 你的页面跨域没有?是当前浏览器加载的页面还是你自己做了个页面获取url地址指定的内容? 如果是url指定的跨域没有?跨域了不是客户端js能搞得了,跨域获取不到内容. 没跨域

加速HTML页面的10个处理技巧

技巧|页面 web开发人员是否必须掌握复杂的组件技术才能加快html页面的访问速度?答案是:不一定!实际上,有许多关于HTML与DHTML方面的技巧,它们原理简单而且上手容易.无论是技术高超的老手,还是初涉编程的菜鸟,领会这些都十分必要. 明显HTML,暗渡"公用脚本" 减少web页面下载时间的关键就是设法减小文件大小.当多个页面共用一些成分内容时,就可以考虑将这些公用部分单独分离出来.比如:我们可以将多个HTML页面都用到的脚本程序编写成独立存在的.js文件,然后再在页面中按如下方式

自动刷新页面的asp.net实现的6种方法

自动刷新页面的asp教程.net实现的6种方法 第一: private void Button1_Click( object sender, System.EventArgs e )   {      Response.Redirect( Request.Url.ToString( ) ); } 第二: private void Button2_Click( object sender, System.EventArgs e )   {      Response.Write( "      &