想用asp.net为关键词加上超链接,C#.net为关键词加上超链接,功能要求:
1、为html文本里的自定义关键词加上超链接
2、关键词出面在html标签属性值,则不加超链接
3、在a或pre开始标签与结束标签内的的不加超链接
4、可以为关键词加上超链接的地方都加上超链接
5、文章里的关键词全都加上同个超链接,不符合搜索引擎优化,所以可以自定义替换次数就最好。
自己写了一个用asp.net为关键词加上超链接,C#.net为关键词加上超链接的方法,大家看看有什么地方可以改进的,想加快速度。有些条件可以没有考虑到,也希望指出。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
///
/// 为关键词加上超链接
///
/// e.g.:
/// string result=GetInnertLink("NingxiXi过得XI好快乐!","xi","ningxi","http://www.ningxi.com","_blank",0)
/// 要把关键词加上超链接的html源文本
/// 将要加上超链接的关键词
/// 将要加上的超链接的描文本
/// 将要加上的超链接的url地址
/// 将要加上的超链接的打开方式
/// 为html文本内的前num个关键词加上超链接,0代表全加上超链接
///
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 = htmlcodeResult.Remove(keyIndex, keyword.Length);
htmlcodeResult = htmlcodeResult.Insert(keyIndex,
"
);
htmlcodeLower = htmlcodeResult.ToLower();
currentIndex = htmlcodeResult.IndexOf(
""
, keyIndex) + 4;
currentNum += 1;
}
}
else
{
//在结束标志外,可以加超链接
keywordResult = htmlcodeResult.Substring(keyIndex, keyword.Length);
htmlcodeResult = htmlcodeResult.Remove(keyIndex, keyword.Length);
htmlcodeResult = htmlcodeResult.Insert(keyIndex,
"
);
htmlcodeLower = htmlcodeResult.ToLower();
currentIndex = htmlcodeResult.IndexOf(
""
, keyIndex) + 4;
currentNum += 1;
}
}
else
{
//关键词是标签内的属性值,不可加超链接,循环再来
currentIndex = keyIndex + keyword.Length;
}
}
else
{
currentIndex = htmlcodeLower.Length + 1;
}
}
return
htmlcodeResult;
}
|