zoukankan      html  css  js  c++  java
  • 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", 1);
            }
            // 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 = 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, "<a href='" + url + "' title='" + title + "' target='" + target + "'>" + keywordResult + "</a>");
    htmlcodeLower = htmlcodeResult.ToLower();
    currentIndex = htmlcodeResult.IndexOf("</a>", keyIndex) + 4;
    currentNum += 1;
    }
    }
    else if ((RBracketIndex = htmlcodeLower.LastIndexOf(">", keyIndex - 1, keyIndex - currentIndex)) != -1)
    {
    //
    // 当查找范围内存在'>'标签则说明在一个静态控件中则需要判断这个控件是否是a标签
    //
    if (htmlcodeLower.Substring(htmlcodeLower.IndexOf('<', currentIndex) + 1, 2) == "/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) + 4;
    currentNum += 1;
    }
    }
    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) + 4;
    currentNum += 1;
    }
    }
    else
    {
    //关键词是标签内的属性值,不可加超链接,循环再来 
    currentIndex = keyIndex + keyword.Length;
    }
    }
    else
    {
    currentIndex = htmlcodeLower.Length + 1;
    }
    }
    return htmlcodeResult;
    }
    
    
    
    
    }
    public class ContModel
    {
        public string key { get; set; }
        public string Url { get; set; }
    }
     
  • 相关阅读:
    C++内存管理
    多线程和多进程的区别(C++)
    如何用C语言封装 C++的类,在 C里面使用
    C/C++将一个整型数组拼接成一个字符串
    C代码中如何调用C++ C++中如何调用C
    Application对象的使用-数据传递以及内存泄漏
    《鸟哥的Linux私房菜》读书笔记二
    《鸟哥的Linux私房菜》读书笔记一
    greenDaoMaster的学习研究
    Handler 引起的内存泄露
  • 原文地址:https://www.cnblogs.com/gzalrj/p/3761250.html
Copyright © 2011-2022 走看看