日期:2014-05-17  浏览次数:20494 次

asp.net为关键词加上超链接,C#.net 为关键词加上超链接
asp.net为关键词加上超链接,C#.net 为关键词加上超链接

想用asp.net为关键词加上超链接,C#.net为关键词加上超链接,功能要求:
1、为html文本里的自定义关键词加上超链接
2、关键词出面在html标签属性值,则不加超链接
3、在a或pre开始标签与结束标签内的的不加超链接
4、可以为关键词加上超链接的地方都加上超链接
5、文章里的关键词全都加上同个超链接,不符合搜索引擎优化,所以可以自定义替换次数就最好。

自己写了一个用asp.net为关键词加上超链接,C#.net为关键词加上超链接的方法,大家看看有什么地方可以改进的,想加快速度。有些条件可以没有考虑到,也希望指出。

C# code

/// <summary>  
 /// 为关键词加上超链接  
 /// </summary>  
 /// e.g.:   
 /// string result=GetInnertLink("<a href="http//www.baidu.com" mce_href="http/www.baidu.com">Ningxi</a>Xi过得<span>XI<span>好<a href="http://www.ningxi.com" mce_href="http://www.ningxi.com">快乐</a>!","xi","ningxi","http://www.ningxi.com","_blank",0)  
 /// <param name="htmlcode">要把关键词加上超链接的html源文本</param>  
 /// <param name="keyword">将要加上超链接的关键词</param>  
 /// <param name="title">将要加上的超链接的描文本</param>  
 /// <param name="url">将要加上的超链接的url地址</param>  
 /// <param name="target">将要加上的超链接的打开方式</param>  
 /// <param name="num">为html文本内的前num个关键词加上超链接,0代表全加上超链接</param>  
 /// <returns>返回为关键词加上超链接后的html文本</returns>  
 private static string GetInnertLink(string htmlcode, string keyword, string title, string url, string target, int num)  
 {  
     string htmlcodeResult = htmlcode;  //用于保存最新的html文本
     string htmlcodeLower = htmlcodeResult.ToLower();  //用于保存最新的Hmtl文本的小写,方便不分大小写找出关键词
     string keywordResult = "";  //用于保存关键词的原来面貌,可能是大写,或者有大也有小
     int keyIndex = 0;           //关键词所在位置
     int currentIndex = 0;       //每次搜索关键词的开始位置
     int currentNum = 0;         //保存当前加上了多少个有效超链接
     int LBracketIndex = 0;      //左尖括号<位置
     int RBracketIndex = 0;      //右尖括号>位置
     if (num == 0)  
     {  
         num = htmlcode.Length;  
     }  
     while (currentIndex <= htmlcodeLower.Length && currentNum < num)  
     {  
         if (htmlcodeLower.IndexOf(keyword.ToLower(), currentIndex) > -1)  
         {  
             keyIndex = htmlcodeLower.IndexOf(keyword.ToLower(), currentIndex);  
             LBracketIndex = keyIndex;  
             do  
             {  
                 LBracketIndex = htmlcodeLower.LastIndexOf("<", LBracketIndex - 1, LBracketIndex - currentIndex);  
             }  
             while (LBracketIndex != -1 && htmlcodeLower.Substring(LBracketIndex + 1, 1) == "/");  
             RBracketIndex = htmlcodeLower.LastIndexOf(">", keyIndex - 1, keyIndex - currentIndex);  
             if (LBracketIndex <= RBracketIndex)  
             {  
                 //不在标签的属性内,可以有在标签开始与结束标志内,或在开始与结束标志外  
                 LBracketIndex = htmlcodeLower.LastIndexOf("<", keyIndex - 1, keyIndex - currentIndex);  
                 if (LBracketIndex != -1 && htmlcodeLower.Substring(LBracketIndex + 1, 1) != "/")  
                 {  
                     //在开始与结束标志内  
                     //关键词在开始标签与结束标签内,要再判定是不是a标签或pre标签  
                     if (htmlcodeLower.Substring(LBracketIndex + 1, 1) == "a" || htmlcodeLower.Substring(LBracketIndex + 3, 3) == "pre")  
                     {  
                         //关键词在开始与结束a标签或pre标签内,不可加超链接,循环再来  
                         currentIndex = keyIndex + keyword.Length;  
                     }  
                     else  
                     {  
                         //可以加超链接  
                         keywordResult = htmlcodeResult.Substring(keyIndex, keyword.Length);  
                         htmlcodeResult = htmlco