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文件中的值. 举例来说 ...
随机推荐
- Python爬去图片实例,python 爬取图片
# coding:utf-8 import requests import re import time proxies = { "http": "http://124. ...
- app store上传图片显示错误:未能创建 屏幕快照
在iTunes Connect中加入一个app后.加入屏幕快照时,依照要求的尺寸上传照片成功,可是在保存的时候提示"未能创建Screenshots for 4-inch iPhone5 an ...
- js获取网页宽高
<script> function getInfo() { var s = ""; s += " 网页可见区域宽:"+ document.body. ...
- 启动项目时tomcat问题汇总
最近SVN上迁下来的新项目,在刚运行项目时tomcat就报错了.以前也经常遇到,没太引起注意,今天终于决定将这个问题好好总结一下. 首先 1.错误:An internal error occurred ...
- PHP学习笔记(10)mysql常用命令
1. 连接mysql数据库: 输入: mysql> mysql -uroot -p123(注意后面没有分号!!) 输出: mysql: [Warning] Using a password on ...
- Hadoop--mapreduce编程实例1
前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...
- yii2 RESTful API 405 Method Not Allowed
关于 Yii2 中 RESTful API 的开发,可以参考另一篇随笔 http://www.cnblogs.com/ganiks/p/yii2-restful-api-dev.html 测试的过程中 ...
- ArcGIS教程:“流向”的工作原理
获取表面的水文特征的关键之中的一个是可以确定从栅格中的每一个像元流出的方向.这可通过流向工具来完毕. 该工具把表面作为输入,然后输出一个显示从每一个像元流出方向的栅格. 假设选择了输出下降率栅格数据选 ...
- EasyUI的window加载的页面不执行js问题说明
http://364434006.iteye.com/blog/1671907 ———————————————————————————————————————————————————————————— ...
- TP 框架 ajax[利用异步提交表单]
//[] $(function () { $("#send-btn" ).click(function (){ //接受表单的值 var username=$('input[nam ...