文章如何动态加上超链接
我现在遇到个问题,就是用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;
}
补充:移动开发 , 移动开发其他问题