在线客服:  

「南宁烟寒网络」提供南宁网站建设、网站策划、南宁网页制作、网站设计、网站改版、南宁SEO优化、网站维护、南宁网站优化、南宁网站推广、广告设计等服务..

咨询热线

在线客服

24小时免费咨询电话:18978941786

客服时间:上午9:30~下午6点

当前位置:首页>> 技术文章 >> NET学习 >> ASP.net 关健词加链接

ASP.net 关健词加链接

收藏 分享 发布日期:2012-2-12 16:30:51    编辑:admin  文章来源:  点击率:

/// <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.yanhan89.com" mce_href=http://www.jjiale.cn>家政网</a>!","xi","ningxi","http://www.yanhan89.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> 
    public 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 = htmlcodeResult.Remove(keyIndex, keyword.Length);
                            htmlcodeResult = htmlcodeResult.Insert(keyIndex, "<a href='" + url + "'  title='" + title + "' target='" + target + "'>" + keywordResult + "</a>");
                            htmlcodeLower = htmlcodeResult.ToLower();
                            currentIndex = htmlcodeResult.IndexOf("</a>", keyIndex) + 4;
                            currentNum += 1;
                        }
                    }
                    else if ((RBracketIndex = htmlcodeLower.LastIndexOf(">", keyIndex - 1, keyIndex - currentIndex)) != -1)
                    {
                        //
                        // 当查找范围内存在'>'标签则说明在一个静态控件中则需要判断这个控件是否是a标签
                        //
                        if (htmlcodeLower.Substring(htmlcodeLower.IndexOf('<', currentIndex) + 1, 2) == "/a")
                        {
                            //关键词在a标签内则不能添加超链接
                            currentIndex = keyIndex + keyword.Length;
                        }
                    }
                    else
                    {
                        //在结束标志外,可以加超链接 
                        keywordResult = htmlcodeResult.Substring(keyIndex, keyword.Length);
                        htmlcodeResult = htmlcodeResult.Remove(keyIndex, keyword.Length);
                        htmlcodeResult = htmlcodeResult.Insert(keyIndex, "<a href='" + url + "' title='" + title + "' target='" + target + "'>" + keywordResult + "</a>");
                        htmlcodeLower = htmlcodeResult.ToLower();
                        currentIndex = htmlcodeResult.IndexOf("</a>", keyIndex) + 4;
                        currentNum += 1;
                    }
                }
                else
                {
                    //关键词是标签内的属性值,不可加超链接,循环再来 
                    currentIndex = keyIndex + keyword.Length;
                }
            }
            else
            {
                currentIndex = htmlcodeLower.Length + 1;
            }
        }
        return htmlcodeResult;
    } 本文章由南宁网站建设南宁网站优化南宁网络公司整理,转载请注明出处:http://www.yanhan89.com/

关于我们 | 域名主机 | 建站套餐 | 企业动态 | 成功案例 | 网站推广 | 建站知识 | 常见问题 | 联系我们

南宁烟寒网络竭诚为您免费提供南宁网站建设南宁网站设计南宁网站优化、维护以及网站技术很方面的网络服务!

南宁网站建设南宁网络公司咨询热线电话:0771-5306126 18967841786(24小时全天电话)

烟寒网络 - 让你进一步走向成功