`
huibin
  • 浏览: 756687 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

网页标签过滤

 
阅读更多

package com.xcy.babyonline.common.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>
 * 
 * <p>
 * Copyright the original author or authors.
 * 
 * @author Tiger1102
 * @date 2011-4-27
 * @dateLastModified 2011-4-27
 */
public class HtmlRegexpUtil {

	private final static String regxpForHtml = "<([^>]*)>"; // 过滤所有以<开头以>结尾的标签

	private final static String regxpForImgTag = "<\\s*img\\s+([^>]*)\\s*>"; // 找出IMG标签

	private final static String regxpForImaTagSrcAttrib = "src=\"([^\"]+)\""; // 找出IMG标签的SRC属性

	/**
	* 
	*/
	public HtmlRegexpUtil() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * 
	 * 基本功能:替换标记以正常显示
	 * <p>
	 * 
	 * @param input
	 * @return String
	 */
	public String replaceTag(String input) {
		if (!hasSpecialChars(input)) {
			return input;
		}
		StringBuffer filtered = new StringBuffer(input.length());
		char c;
		for (int i = 0; i <= input.length() - 1; i++) {
			c = input.charAt(i);
			switch (c) {
			case '<':
				filtered.append("&lt;");
				break;
			case '>':
				filtered.append("&gt;");
				break;
			case '"':
				filtered.append("&quot;");
				break;
			case '&':
				filtered.append("&amp;");
				break;
			default:
				filtered.append(c);
			}

		}
		return (filtered.toString());
	}

	/**
	 * 
	 * 基本功能:判断标记是否存在
	 * <p>
	 * 
	 * @param input
	 * @return boolean
	 */
	public boolean hasSpecialChars(String input) {
		boolean flag = false;
		if ((input != null) && (input.length() > 0)) {
			char c;
			for (int i = 0; i <= input.length() - 1; i++) {
				c = input.charAt(i);
				switch (c) {
				case '>':
					flag = true;
					break;
				case '<':
					flag = true;
					break;
				case '"':
					flag = true;
					break;
				case '&':
					flag = true;
					break;
				}
			}
		}
		return flag;
	}

	/**
	 * 
	 * 基本功能:过滤所有以"<"开头以">"结尾的标签
	 * <p>
	 * 
	 * @param str
	 * @return String
	 */
	public static String filterHtml(String str) {
		Pattern pattern = Pattern.compile(regxpForHtml);
		Matcher matcher = pattern.matcher(str);
		StringBuffer sb = new StringBuffer();
		boolean result1 = matcher.find();
		while (result1) {
			matcher.appendReplacement(sb, "");
			result1 = matcher.find();
		}
		matcher.appendTail(sb);
		return sb.toString();
	}

	/**
	 * 
	 * 基本功能:过滤指定标签
	 * <p>
	 * 
	 * @param str
	 * @param tag
	 *            指定标签
	 * @return String
	 */
	public static String fiterHtmlTag(String str, String tag) {
		String regxp = "<\\s*" + tag + "\\s+([^>]*)\\s*>";
		Pattern pattern = Pattern.compile(regxp);
		Matcher matcher = pattern.matcher(str);
		StringBuffer sb = new StringBuffer();
		boolean result1 = matcher.find();
		while (result1) {
			matcher.appendReplacement(sb, "");
			result1 = matcher.find();
		}
		matcher.appendTail(sb);
		return sb.toString();
	}

	/**
	 * 
	 * 基本功能:替换指定的标签
	 * <p>
	 * 
	 * @param str
	 * @param beforeTag
	 *            要替换的标签
	 * @param tagAttrib
	 *            要替换的标签属性值
	 * @param startTag
	 *            新标签开始标记
	 * @param endTag
	 *            新标签结束标记
	 * @return String
	 * @如:替换img标签的src属性值为[img]属性值[/img]
	 */
	public static String replaceHtmlTag(String str, String beforeTag,
			String tagAttrib, String startTag, String endTag) {
		String regxpForTag = "<\\s*" + beforeTag + "\\s+([^>]*)\\s*>";
		String regxpForTagAttrib = tagAttrib + "=\"([^\"]+)\"";
		Pattern patternForTag = Pattern.compile(regxpForTag);
		Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
		Matcher matcherForTag = patternForTag.matcher(str);
		StringBuffer sb = new StringBuffer();
		boolean result = matcherForTag.find();
		while (result) {
			StringBuffer sbreplace = new StringBuffer();
			Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag
					.group(1));
			if (matcherForAttrib.find()) {
				matcherForAttrib.appendReplacement(sbreplace, startTag
						+ matcherForAttrib.group(1) + endTag);
			}
			matcherForTag.appendReplacement(sb, sbreplace.toString());
			result = matcherForTag.find();
		}
		matcherForTag.appendTail(sb);
		return sb.toString();
	}

}
 
分享到:
评论

相关推荐

    Java过滤器,字符过滤,标签过滤

    在这个小样例中,我们看到的是如何使用Java实现字符过滤和标签过滤,以及字符编码的转换。这在处理用户输入或者显示网页内容时特别有用,可以防止SQL注入、XSS攻击等安全问题,同时确保数据在不同系统间正确传输。 ...

    VB 网页标签提取与过滤

    在VB(Visual Basic)编程环境中,网页标签的提取与过滤是一项常见的任务,特别是在网页抓取或数据挖掘项目中。这个主题涉及到如何从HTML文档中获取特定的信息,如文本内容、图片链接、音频文件(如mp3)以及网页...

    wxParse过滤HTML标签.rar

    以下是对使用wxParse插件进行HTML标签过滤的详细步骤: 1. **引入wxParse模块**:首先,你需要在小程序项目中引入wxParse模块。解压"wxParse过滤HTML标签.rar"文件,将其中的wxParse文件夹放入项目的lib目录下。...

    java过滤html,css,js标签工具类(UnHtmlScript)

    `UnHtmlScript`工具类就是为了解决这个问题而设计的,它能够帮助开发者有效地过滤掉HTML、CSS和JavaScript标签,提取出纯文本内容。 HTML标签是用来构建网页结构的,例如`&lt;p&gt;`用于段落,`&lt;a&gt;`用于链接等。CSS则是...

    java正则表达式过滤html标签

    1. 网页内容的过滤:可以使用HtmlRegexpUtil类来过滤网页内容中的html标签,以便在网页上正确显示。 2. 文本处理:可以使用HtmlRegexpUtil类来处理文本中的html标签,以便提取或更改文本中的信息。 3. 数据清理:...

    java 读取html过滤标签

    在Java编程中,读取HTML并过滤特定标签是一项常见的任务,尤其在处理网页抓取、数据提取或构建网络爬虫时。这篇博文链接虽然没有提供具体的内容,但我们可以通过标题和标签来推测其主要讨论的内容。这里我们将深入...

    VB 正则过滤所有网页标签提取字符串.rar

    vb编写的通过正则过滤所有网页标签提取字符串,希望你喜欢。

    过滤HTML标签类

    在IT行业中,过滤HTML标签是常见的数据处理任务,特别是在处理用户输入、数据分析或者网页抓取时。这个主题的标题“过滤HTML标签类”暗示我们将会探讨一个专门用于去除或处理HTML标签的类或库。这类工具通常用于确保...

    Java正则表达式过滤html标签1[参考].pdf

    然后,我们使用Pattern和Matcher类来编译和匹配该正则表达式,并将匹配的结果替换为空字符串,从而实现了过滤所有以“&lt;”开头以“&gt;”结尾的标签的功能。 提取IMG标签的SRC属性 在HtmlRegexpUtil类中,我们定义了一...

    C# 过滤HTML标签的几种方法

    根据提供的文件信息,本文将详细解释C#中用于过滤HTML标签的几种方法,并对每一步进行深入解析。此过程涉及正则表达式、字符串替换以及HTML实体编码转换等技术细节。 ### C#过滤HTML标签的方法 #### 方法一:使用...

    html标签过滤

    HTML标签过滤是网络开发中一个重要的安全措施,主要用于防止XSS(Cross-Site Scripting)攻击。XSS攻击是通过在网页中注入恶意脚本,从而控制或窃取用户浏览器上的信息。为了防止这种情况,开发者通常会在处理用户...

    baidu-web-filter.rar_网页 过滤

    标签“网页_过滤”再次强调了这个项目的核心功能,即对网页内容进行筛选和控制,可能包括关键字过滤、URL黑名单、内容检测等技术,以达到过滤掉特定信息的目的。 【压缩包子文件的文件名称列表】:小胖的百度网页...

    SuperMap iclient for javascript标签专题图过滤显示

    **SuperMap iClient for JavaScript:标签专题图过滤显示详解** 在WebGIS开发中,SuperMap iClient for JavaScript是一个强大的库,它提供了丰富的地图操作和分析功能。本篇将深入探讨如何利用该库实现基于属性SQL...

    java过滤html代码

    有一些特殊的情况,如自闭合标签 `&lt;img&gt;` 或 ` `,它们没有对应的结束标签。 接下来,我们来看如何编写一个简单的Java方法,使用正则表达式来移除字符串中的HTML标签。以下是一个名为 `RemoveHtmlInString` 的类...

    VB过滤网页元素的万能函数

    在VB(Visual Basic)编程中,处理网页元素的过滤是一项常见的任务,特别是在自动化脚本、网页数据抓取或用户界面交互的应用中。标题所提到的“VB过滤网页元素的万能函数”是一种强大的工具,它允许开发者根据多种...

    PHP中HTML标签过滤技巧

    同时,结合正则表达式处理特定内容(如图片),可以在过滤掉潜在危险的同时,保持网页的视觉效果和用户体验。开发者在实际应用中,应当根据不同的场景灵活选择过滤策略,并加以测试验证,以确保网站的安全和用户内容...

    基于权重均值的不良网页过滤算法研究.pdf

    根据标题和描述,本文应该涉及的关键词是“权重均值”、“不良网页过滤”以及“算法研究”。以下是从这些关键词出发,可能涉及的知识点。 首先,关于“权重均值”的概念,这通常是在数据分析和统计学中常用的一个...

    js过滤HTML标签完整实例

    在互联网编程中,过滤HTML标签是一个常见需求,尤其在处理用户输入的...在实际应用中,我们还需要考虑到过滤的严格程度,有时候可能需要保留某些"安全"的标签或属性,这需要根据实际业务需求和安全考虑来调整过滤规则。

    asp过滤实现过滤所有的HTML代码

    HTML标签过滤是确保网页安全性和正确性的重要环节之一。未经处理的用户输入可能会包含恶意脚本或者不希望显示的格式化标签,这不仅可能导致页面样式出现问题,还可能成为XSS(跨站脚本攻击)的入口,威胁网站的安全...

    java的xxsProtect过滤xss

    XXSProtect通过过滤输入数据,防止恶意代码在网页上被执行。 在提供的描述中,我们看到XXSProtect的实现包括以下几个关键部分: 1. **XSS/bin**: 这个文件夹包含了所有必要的jar包,这些jar包可能包含XXSProtect的...

Global site tag (gtag.js) - Google Analytics