C#自动给文章关键字加链接实现代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ivony.Html;
using Ivony.Html.Parser;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<ContModel> strarr = new List<ContModel>();
strarr.Add(new ContModel() { key = "网络", Url = "http://baidu.com" });
strarr.Add(new ContModel() { key = "QQ", Url = "http://qq.com" });
strarr.Add(new ContModel() { key = "中国", Url = "http://baidu.com" });
strarr.Add(new ContModel() { key = "知识", Url = "http://baidu.com" });
string str = " 知识技术网络;网络应用 网络基本知识 <p><img src='/sss.jpg' alt='网络技术网络;网络应用'/>中國<a href='http://gg.com'>44</a></p><a href=\"http://www.stobar.cn\">网络技术网络;网络应用 网络基本知识</a>";
foreach (var s in strarr)
{
str = GetInnertLink(str, s.key, s.key, s.Url, "_blank", );
}
// string result = GetInnertLink(str, "网络", "网络", "http:baidu.com", "rr", 1);
Response.Write(str);
Response.Redirect("");
} /// <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.ningxi.com" mce_href="http://www.ningxi.com">快乐</a>!","xi","ningxi","http://www.ningxi.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 = ; //关键词所在位置
int currentIndex = ; //每次搜索关键词的开始位置
int currentNum = ; //保存当前加上了多少个有效超链接
int LBracketIndex = ; //左尖括号<位置
int RBracketIndex = ; //右尖括号>位置
if (num == )
{
num = htmlcode.Length;
}
while (currentIndex <= htmlcodeLower.Length && currentNum < num)
{
if (htmlcodeLower.IndexOf(keyword.ToLower(), currentIndex) > -)
{
keyIndex = htmlcodeLower.IndexOf(keyword.ToLower(), currentIndex);
LBracketIndex = keyIndex;
do
{
LBracketIndex = htmlcodeLower.LastIndexOf("<", LBracketIndex - , LBracketIndex - currentIndex);
}
while (LBracketIndex != - && htmlcodeLower.Substring(LBracketIndex + , ) == "/");
RBracketIndex = htmlcodeLower.LastIndexOf(">", keyIndex - , keyIndex - currentIndex);
if (LBracketIndex <= RBracketIndex)
{
//不在标签的属性内,可以有在标签开始与结束标志内,或在开始与结束标志外
LBracketIndex = htmlcodeLower.LastIndexOf("<", keyIndex - , keyIndex - currentIndex);
if (LBracketIndex != - && htmlcodeLower.Substring(LBracketIndex + , ) != "/")
{
//在开始与结束标志内
//关键词在开始标签与结束标签内,要再判定是不是a标签或pre标签
if (htmlcodeLower.Substring(LBracketIndex + , ) == "a" || htmlcodeLower.Substring(LBracketIndex + , ) == "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) + ;
currentNum += ;
}
}
else if ((RBracketIndex = htmlcodeLower.LastIndexOf(">", keyIndex - , keyIndex - currentIndex)) != -)
{
//
// 当查找范围内存在'>'标签则说明在一个静态控件中则需要判断这个控件是否是a标签
//
if (htmlcodeLower.Substring(htmlcodeLower.IndexOf('<', currentIndex) + , ) == "/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) + ;
currentNum += ;
}
}
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) + ;
currentNum += ;
}
}
else
{
//关键词是标签内的属性值,不可加超链接,循环再来
currentIndex = keyIndex + keyword.Length;
}
}
else
{
currentIndex = htmlcodeLower.Length + ;
}
}
return htmlcodeResult;
} }
public class ContModel
{
public string key { get; set; }
public string Url { get; set; }
}
C#自动给文章关键字加链接实现代码的更多相关文章
- javascript 给关键字加链接
var keys = { "和尚":["http://www.baidu.com","#ff0000"], "系统":[ ...
- JavaScript实现url地址自动检测并添加URL链接示例代码
写一个简单的聊天系统,发出Htpp的Url实现跳转加上a标签,下面是具体的实现,感兴趣的朋友不要错过 背景:写一个简单的聊天系统,发出Htpp的Url实现跳转加上a标签. 实现代码: 复制代码代码如 ...
- 帝国cms内容关键字自动加链接且设置内容关键字只替换一次
网站上线前先设置一些内部链接对后期的优化排名很有帮助,帝国cms也可以设置文章中的关键字自动加链接,但是要注意一下关键词替换次数,最好是1次. 怎么操作呢?分两步完成 1.帝国cms文章关键字自动加链 ...
- android黑科技系列——解析公众号文章消息和链接文章消息自动打开原理
一.辅助功能方案分析 关于WX的各种功能插件已经非常普遍了,而现在的插件都是依赖于Xposed框架进行的,所以个人觉得WX应该在这方便应对Xposed框架的使用防护,防止插件满天飞的现象,本文来介绍一 ...
- 加链接太麻烦?使用 linkit 模块提升用户编辑体验
在制作网站内容时,适当地添加链接会非常用利于网站内容的SEO.加入链接的文章可以让访客了解到更多相关内容,从而提升文章的质量.被链接到的内容也能因此获得更多的访问和关注.只不过,在内容编辑时添加链接却 ...
- 基于.NetCore开发博客项目 StarBlog - (17) 自动下载文章里的外部图片
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- word表格自动编号,前面加章节号
1.需求 最近要用Word写一些有很多公式的文档,一个小节就有十几个公式,一章有几十个公式.我希望能公式能自动编号.例如我在公式(3.3)前面增加了一个公式并编号后,后面的编号以及引用编号的地方会自动 ...
- iOS 利用webView加载html代码,在代理中获取html页面的链接时出现的问题
getDetailWebview.loadHTMLString(webViewData as String, baseURL:NSURL(string: "\(ProBaseWeb)&quo ...
- unreal3对象属性自动从配置文件中加载的机制
unrealscript中有两个与属性自动配置相关的关键字: config/globalconfig 当把它们应用于属性时,对象在创建后,该属性的初始值会被自动设置为相对应ini文件中的值. 举例来说 ...
随机推荐
- 总结文件操作函数(一)-C语言
在进程一開始执行,就自己主动打开了三个相应设备的文件.它们是标准输入.输出.错误流.分别用全局文件指针stdin.stdout.stderr表示,相应的文件描写叙述符为0.1.2:stdin具有可读属 ...
- instanceof 与typeof的用法
通常来讲,使用 instanceof 就是判断一个实例是否属于某种类型.例如: var oStringObject = new String("hello world"); con ...
- atitit.无为而治在企业管理,国家治理,教育领域的具体思想与实践
atitit.无为而治在企业管理,国家治理,教育领域的具体思想与实践 1. 什么是无为而治 1 2. 无为而治的三个原则 1 3. 抓大放小 1 4. 治理国家 2 5. 企业管理 2 6. 教育领域 ...
- Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast) 1. 使用js,html 撰写dsl1 1.1. 架构图1 1.2. html2 1.3. Js2 1.4. C ...
- 标志位 last break
last-完成rewrite指令的处理,之后搜索对应的URI和location; break-完成rewrite指令的外理 [root@web01 app]# cat /app/server/ngin ...
- iOS开发25个性能调优技巧
1. 用ARC管理内存 ARC(Automatic Reference Counting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为 ...
- myeclipse能启动tomcat但是用startup.bat无法启动
myeclipse能启动tomcat但是用startup.bat无法启动 这个问题困扰了我一天,把一天的周末时间白白花费了.各种百度,各种尝试都没办法解决.在江湖上闯,难道就只有百度一招吗? 不是,我 ...
- Oracle Explain plan 使用总结
Oracle Explain plan使用总结 写多了SQL语句,伴随着数据量的海增,总会遇到性能的问题.在Oracle领域一个不好的习惯,一旦遇到性能问题就推给DBA来做.长期如此,反而对DB ...
- 跟着百度学PHP[15]-会话控制session的工作机制
COOKIE和SESSION的两大区别: cookie是存储与客户端 session是存储与服务端 需要开启session的时候需要使用session_start开启,且session的开头不能拥有任 ...
- RMAN Restore, Recovery
Complete recovery: rman target / nocatalog startup mount; restore database; recover database; alter ...