我想给关键词加个背景颜色
规则如下:比如 “联合卡车”  因为卡车是关键词,联合卡车也是关键词
所以联合卡车和卡车都有背景色,在程序中控制的显示背景色不同,在这里就不要求了
联合卡车和卡车都有一个超链接,如果内容中有"阳光明" 那么就会有不同的背景色,如果这个不好实现,就先读到哪个关键词,就给哪个词加背景了,但是上面哪个包含的一定要实现。希望高人帮我把下面的方法给改了,我这个方法会把联合卡车超链接的title中的卡车也给替换了,所以样式会乱!
没分了,希望有人帮忙,等别的帖子有答案了,结贴后给这个帖子加分!!!
先谢谢大家了
//过滤内容
    public static string FilterText(string contents)//contents传入的内容
    {
        //定义一个关键字的数组
        string[] c = new string[] { "联合卡车", "卡车", "东风" ,"阳光","光明"};
        //循环数组中的每个元素
        for (int i = 0; i < c.Length; i++)
        {
            //内容中包含关键字
            if (contents.Contains(c[i]))
            {
                //取到关键字开始的位置
                int x = contents.IndexOf(c[i]);
                //取到关键字的长度
                int y = c[i].Length;
                //截取出替换前的关键字
                string a = contents.Substring(x, y); 
                //替换后的样式
                string v = "<a href=\"#\" title=\""+a+"\">"+a+"</a>";
                //把关键字替换掉
                contents = contents.Replace(a, v);
            }
        }
        //返回过滤后的内容
        return contents;
    }

解决方案 »

  1.   

        public static string FilterText(string contents)//contents传入的内容
        {
            //定义一个关键字的数组
            string[] c = new string[] { "联合卡车", "卡车", "东风" ,"阳光","光明"};
            //循环数组中的每个元素
            for (int i = 0; i < c.Length; i++)
            {
                //内容中包含关键字
                if (contents.Contains(c[i]))
                {
                    //替换后的样式
                    string v = "<a href=\"#\" title=\""+c[i]+"\" style=\"background:#ccc\">"+c[i]+"</a>";
                    //把关键字替换掉
                    contents = contents.Replace(c[i], v);
                }
            }
            //返回过滤后的内容
            return contents;
        }
      

  2.   

    如果是联合卡车,出来的效果应该是类似这个样子的
    <a href="Default.aspx" title="联合卡车" style="background-color:#FFE6E6">联合<a href="Default2.aspx" title="卡车" style="background-color:#FF0000">卡车</a></a>
      

  3.   

    public static string FilterText(string contents)//contents传入的内容
    {
    string p = "";
    //定义一个关键字的数组
    string[] c = new string[] { "联合卡车", "卡车", "东风", "阳光", "光明" };
    //循环数组中的每个元素
    for (int i = 0; i < c.Length; i++)
    {
    //内容中包含关键字
    if (contents.Contains(c[i]))
    {
    p = c[i];
    for (int j = 0; j < c[i].Length; j++)
    p = p.Insert(j*2, "|");
    //替换后的样式
    string v = "<a href=\"#\" title=\"" + p + "\" style=\"background:#ccc\">" + c[i] + "</a>";
    //把关键字替换掉
    contents = contents.Replace(c[i], v);
    }
    }
    for (int i = 0; i < c.Length; i++)
    contents = contents.Replace("|", "");
    //返回过滤后的内容
    return contents;
    }
    颜色你可以用不同的,自己设下。
      

  4.   

    更正一下:最后的循环:
    for (int i = 0; i < c.Length; i++)
              contents = contents.Replace("|", "");
    是多余的,改成
    contents = contents.Replace("|", "");
    就可以了。
      

  5.   

    犀利。
    string[] c = new string[] { "联合卡车", "卡车", "东风", "阳光", "光明" };
    应该改成
    string[] c = new string[] { "联合", "卡车", "东风", "阳光", "光明" };这样比较好。。
      

  6.   

    我这里的关键词都是从数据库中读取出来的,最后也不是数组的形式,只是先用这样写个例子,至于背景色使用程序计算出来的,那个我已经做出来了
     p = p.Insert(j*2, "|");
    这个2是什么意思啊?
    谢谢好心人了
      

  7.   

    贴出例子,有需要的可以看下
     /// <summary>
            /// 改变关键词的样式
            /// </summary>
            /// <param name="contents">要改变的内容</param>
            /// <param name="dt">条件即关键词集合</param>
            /// <returns></returns>
            public static string changeStyle(string contents, DataTable dt)
            {
                //A标记中title中显示的文本改变样式
                string p = "";
                //获取最热关键词的文章数量
                int max = Convert.ToInt32(ArticleKeyWordsRules.getArticleCountAll().Rows[0]["ArticleCount"]);
                //获取到的关键词关联文章总数的记录条数
                int kcount = ArticleKeyWordsRules.getArticleCountAll().Rows.Count;
                //获取最冷关键词的文章数量
                int min = Convert.ToInt32(ArticleKeyWordsRules.getArticleCountAll().Rows[kcount - 1]["ArticleCount"]);
                //循环关键词列表
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (contents.Contains(dt.Rows[i]["KeyWords"].ToString()))
                    {
                        //根据关键词获取总数量
                        int count = ArticleKeyWordsRules.getArticleCountByKeyWords(dt.Rows[i]["KeyWords"].ToString());
                        //取出替换前的关键词
                        string wordsBefore = dt.Rows[i]["KeyWords"].ToString();
                        //A标记中title显示的文本
                        p = wordsBefore;
                        //给A标记的title值进行改变,以免被替换掉
                        for (int j = 0; j < wordsBefore.Length; j++)
                        {
                            //j*2  添加的字符位置,等于后面的字符长度+1
                            p = p.Insert(j * 4, "|@#");
                        }
                        //获取该关键词的值(绿色=蓝色=值)
                        double num = (1 - count / (max - min)) * 230;
                        //把数字转换成int型的
                        int number = Convert.ToInt32(num);
                        //确定该关键词的背景色
                        string color = "#FF" + DtoX(number) + DtoX(number);
                        //替换后的样式
                        string wordsAfter = "<a href=\"ArticleList.aspx?KeyWords=" + HttpContext.Current.Server.UrlEncode(wordsBefore) + "&currentPage=1\" title=\"关&nbsp;键&nbsp;词:" + p + " &#10;文章数量:" + count + "\" target=\"_blank\"><span style=\"background-color:" + color + ";\">" + wordsBefore + "</span></a>";
                        contents = contents.Replace(wordsBefore, wordsAfter);
                    }
                }
                //把|@#替换掉
                contents = contents.Replace("|@#", "");
                //返回内容
                return contents;
            }