当前位置:编程学习 > wap >>

文章如何动态加上超链接

我现在遇到个问题,就是用FckEditer编辑文章内容,需要对文章中出现指定关键字出的给其加上超链接?
如:郭德纲为关键字,文章内容:阿斯蒂芬归属地郭德纲高度散发。经过处理后文章显示时郭德纲三个字加上了超链接标记?敬请大侠们看看? 超链接 fckediter --------------------编程问答-------------------- 上面为实现文章内链,代码我已实现了
请大家看看,不过获取不同的随机数的方法不好,提一下建议:
 /// <summary>
    ///  // 为字符串中某个指定的字符串添加上网页超链接标记方法
    /// </summary>
    /// <param name="keyWords">指定添加链接的关键字</param>
    /// <param name="url">链接地址</param>
    /// <param name="sources">数据来源</param>
    /// <param name="count">出现超链接的个数</param>
    /// <returns></returns>
    public static string DoKeyWordsAddHyperlink(string keyWords,string url, string sources,int count)
    {
        //此方法可实现为第一个出现关键字处添加上超链接
        //if (sources.Contains(keyWords))//字符串中存在keyWords
        //{
        //    int startIndex = sources.IndexOf(keyWords);
        //    string newStr = sources.Insert(startIndex, "<a href='" + url + "'>");
        //    int secondStartIndex = newStr.IndexOf(keyWords);
        //    int lastIndex = secondStartIndex + keyWords.Length;
        //    string lastStr = newStr.Insert(lastIndex, "</a>");
        //    return lastStr.Replace("'", "\""); 
        //}
        //else
        //{
        //    return sources;
        //}

        //用正则替换,实现了为文章中所有的关键字随机添加超链接
        MatchCollection coll = Regex.Matches(sources, keyWords, RegexOptions.IgnoreCase);//获取出现的关键字集合
        int keyCount = coll.Count;//总个数
        //关键字出现次数不大于要求次数
        if (keyCount <= count)
        {
            return Regex.Replace(sources, keyWords, "<a href=\"" + url + "\">" + keyWords + "</a>");//全部替换
        }
        //关键字出现次数大于要求次数
        string result = sources;//初始值为输入字符串
        for (int i = 0; i < count; i++)
        {
            MatchCollection collList = Regex.Matches(result, keyWords, RegexOptions.IgnoreCase);
            int num = new RandomUtil().GetRandNum(keyCount);//得到指定范围的随机数
            int startIndex = collList[num].Index;//随机得到其出现关键字位置的开始索引
            string newStr = result.Insert(startIndex, "<a href=\"" + url + "\">");//插入开始超链接标记
            MatchCollection coSecond = Regex.Matches(newStr, keyWords, RegexOptions.IgnoreCase);//得到添加链接后的字符串的关键字集合
            int lastIndex = coSecond[num].Index + keyWords.Length;//获取该关键字的结束索引
            result = newStr.Insert(lastIndex, "</a>");//插入结束超链接标记
        }
        return result;
    }

 /// <summary>
   /// 获取不重复的(限范围)整数随机数字
   /// </summary>
   /// <param name="num"></param>
   /// <returns></returns>
    public  int GetRandNum(int num)
    {
        int lastNum = 0;
        //long tick = DateTime.Now.Ticks;
        //Random ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
        System.Threading.Thread.Sleep(100);//线程停止100毫秒
        Random rand = new Random(unchecked((int)DateTime.Now.Ticks));
        lastNum = rand.Next(0, num);
        return lastNum;
    }
补充:移动开发 ,  移动开发其他问题
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,