日期:2014-05-18 浏览次数:20836 次
string content = "库中查出的文章内容"; //为了便于测试效果,自定义一段内容 content = "各位朋友,你知道csdn.net这个网站吗?这是中国最专业的最大的编程技术论坛型网站,网址是www.csdn.net,输入csdn.net也一样正常访问,我在csdn.net上也有博客,欢迎大家看我的文章哦,嘿嘿"; //先对文章内容进行HTML编码 content = Server.HtmlEncode(content).Replace(" ", " ").Replace("\r\n", "<br/>"); //用正则查找文中链接字串并加超链接 //下面这行代码为URL正则 string URLzhengze = "(http[s]?://)?(www\\.)?(([a-zA-Z0-9-_]{1,35}\\.){1,3})((com)|(net)|(org)|(com\\.cn)|(net\\.cn)|(org\\.cn)|(cn)|(la)|(hk)|(info)|(cc)|(tel)|(gov\\.cn)|(so)|(name)|(me)|(co)|(biz)|(cc)|(tv)|(asia))((/[a-zA-Z0-9-_%@]{1,50})|(/)){0,5}(\\.[a-zA-Z]{2,6})?(\\?[a-zA-Z0-9-_]{1,30}=[a-zA-Z0-9-_%@]{0,50})?(&[a-zA-Z0-9-_]{1,30}=[a-zA-Z0-9-_%@]{0,50}){0,3}"; //下面的代码为声明一个变量,变量意思是RUL集合,用来接收帖子内容中查出的所以URL字串的集合,并用半角空格分开每个URL字串 string URLjihe = ""; MatchCollection mc = Regex.Matches(content, URLzhengze, RegexOptions.IgnoreCase); foreach (Match m in mc) //循环查找后,集成一个集合,注意,各个之间必须用符号分隔开来,这里用空格来分隔,主要是为了能用string.Trim()方法去除首尾空格,下一步处理起来方便 { URLjihe += m.Value + " "; //如果匹配项小于1,该集合就为0字节 } URLjihe = URLjihe.Trim(); //对查找出来的集合,去掉首尾空格(中间空格依然保留) if (URLjihe.Length > 5) //如果至少有一个链接,长度至少会大于5,没有就不用执行下面的代码了 { string[] sArray = Regex.Split(URLjihe, " ", RegexOptions.IgnoreCase); //建立一个数组来接收输入的字符串 for (int i = 0; i < sArray.Length; i++) //sArray.Length获取该数组中的所有元素的总和,并作循环处理 { string URLText = sArray[i].ToString(); //这是用户自己输写的链接字串原文,注意必须加ToString(),否则报错 string lianjieUrl = URLText; //程序给原字串添加的链接URL,注意:用户自己输入的链接字串不可直接使用,因为一旦用户不加http://的话,浏览器就会解释为相对路径 if (Regex.IsMatch(URLText, "http[s]?://") == false) //如果链接地址串中无http://,则会被浏览器解释为相对路径,所以必须搞成绝对路径。 { lianjieUrl = "http://" + URLText; } content = content.Replace(URLText, "<a href='" + lianjieUrl + "' target='_blank'>" + URLText + "</a>"); //content = Regex.Replace(content, URLText, "<a href='" + lianjieUrl + "' target='_blank'>" + URLText + "</a>", RegexOptions.IgnoreCase); //此处不能用这个方法,否则报错,必须用上一行代码 } } Label1.Text = content; //输出文章内容到页面