导航:首页 > 净水问答 > c过滤html代码

c过滤html代码

发布时间:2023-02-10 08:04:15

⑴ 用正则表达式过滤HTML标签

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

/**
* <p>
* Title: HTML相关的正则表达式工具类
* </p>
* <p>
* Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记
* </p>
* <p>
* Copyright: Copyright (c) 2006
* </p>
*
* @ hejian
* @version 1.0
* @createtime 2006-10-16
*/

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("<");
break;
case '>':
filtered.append(">");
break;
case '"':
filtered.append(""");
break;
case '&':
filtered.append("&");
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();
}
}

⑵ asp怎样去除文章中的html代码

方法一 : 禁用HTML
最简单的方法是直接禁用html标签而不用移除它们. 可以使用Replace()函数. 例如:
strText = Replace(strText, "<script", "<script", 1, -1, 1)
或者直接禁用所有的html:
strText = Replace(strText, "<", "<")
这样做虽然很安全,但显得不够友好.(用户提交的文本会变得难以阅读)
方法二: 使用"<"和">"
怎样使得html标签从文本中消失呢? 我们可以去掉"<"和">"中间的所有内容
在JavaScript中这很简单:
function RemoveHTML( strText )
{
var regEx = /<[^>]*>/g;
return strText.replace(regEx, "");
}
现在回到VBScript, 对于Scripting引擎5.0或更高版本(可以通过调用ScriptEngineMajorVersion和ScriptEngineMinorVersion函数来检验版本),我们也可以使用RegExp物体:
Function RemoveHTML( strText )
Dim RegEx
Set RegEx = New RegExp
RegEx.Pattern = "<[^>]*>"
RegEx.Global = True
RemoveHTML = RegEx.Replace(strText, "")
End Function
若不用正则表达式,下面的函数可以达到同样的目的:
Function RemoveHTML( strText )
Dim nPos1
Dim nPos2
nPos1 = InStr(strText, "<")
Do While nPos1 > 0
nPos2 = InStr(nPos1 + 1, strText, ">")
If nPos2 > 0 Then
strText = Left(strText, nPos1 - 1) & Mid(strText, nPos2 + 1)
Else
Exit Do
End If
nPos1 = InStr(strText, "<")
Loop

RemoveHTML = strText
End Function
以上的方法虽然都可以去掉括号内的html标签,但是这些方法都存在以下问题:
首先,文本内的任何不表示html的尖括号会被去除.而且两个尖括号中间的文本也会被删掉.换句话说,在文本中插入任何"<"或">"都会出现不可预料的结果.
另外,这种方法不能控制删除哪些html标签.比如<b><i>这些无害的标签通常是允许的.
方法三:使用IE或其他工具
有很多缺点:
"It may be desirable to parse HTML files inside a Web server process in response to a browser page request. However, the WebBrowser control, DHTML Editing Control, MSHTML, and other Internet Explorer components may not function properly in an Active Server Pages (ASP) page or other application run in a Web server application." (http://support.microsoft.com/support/kb/articles/Q244/0/85.ASP?LN=EN-US&SD=gn&FR=0)
方法四:VBScript
以下的函数可以限制到具体的html标签
简介:
要控制被删除的标签列表,可以通过向TAGLIST常数中添加/删除标记来实现. 例如,要保留所有的<B>标签,则从TAGLIST中删除B. 当前的列表包含了MSDN中的所有html标签以及 LAYER 标签. 每个标签要用";"括起来.
开始标签和结束标签都会被删除,例如"<A...>"和</A...>
若标签同时在 TAGLIST 和 BLOCKTAGLIST 常数中,则起始标签和结束标签之间的所有内容都会被删除
没有结束标记的标签不被视为html标签,其内容不会被删除
块标签若没有结尾标记,从此标签开始到文本结束的所有内容会被删除
若"<!--"后跟的字符不是空格,注释标签不会被删除
使用这个函数很简单:
strPlainText = RemoveHTML(strTextWithHTML)
函数内容如下:
Function RemoveHTML( strText )
Dim TAGLIST
TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" &_
"BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" &_
"COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;" &_
"FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;IMG;" &_
"INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;LISTING;MAP;MARQUEE;" &_
"MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;" &_
"PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;" &_
"TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;"
Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;"
Dim nPos1
Dim nPos2
Dim nPos3
Dim strResult
Dim strTagName
Dim bRemove
Dim bSearchForBlock
nPos1 = InStr(strText, "<")
Do While nPos1 > 0
nPos2 = InStr(nPos1 + 1, strText, ">")
If nPos2 > 0 Then
strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")
nPos3 = InStr(strTagName, " ")
If nPos3 > 0 Then
strTagName = Left(strTagName, nPos3 - 1)
End If
If Left(strTagName, 1) = "/" Then
strTagName = Mid(strTagName, 2)
bSearchForBlock = False
Else
bSearchForBlock = True
End If

If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
bRemove = True
If bSearchForBlock Then
If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
nPos2 = Len(strText)
nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
If nPos3 > 0 Then
nPos3 = InStr(nPos3 + 1, strText, ">")
End If

If nPos3 > 0 Then
nPos2 = nPos3
End If
End If
End If
Else
bRemove = False
End If

If bRemove Then
strResult = strResult & Left(strText, nPos1 - 1)
strText = Mid(strText, nPos2 + 1)
Else
strResult = strResult & Left(strText, nPos1)
strText = Mid(strText, nPos1 + 1)
End If
Else
strResult = strResult & strText
strText = ""
End If

nPos1 = InStr(strText, "<")
Loop
strResult = strResult & strText

RemoveHTML = strResult
End Function

⑶ c语言处理保存的HTML文件

寻找单个的字符,可以使用strchr函数
strstr函数寻找的时候,是进行字符串匹配
如果用gb2312编码的话,这是一种多字节字节字符集,原理上并不会出现找不到的情况
之所以会这样,可能是查找子串没有设置好

另外strstr或者strchr进行连续查找的时候,一定要不断的修改源字符串地址,将找过的字符串略过

⑷ 如何用C/C++来解析一段html代码

简单的代码,你可以尝试用flex生成C/C++代码,前提是你懂一点正则表达式
复杂的用开源库,libxml2之类。

⑸ 如何用C语言实现解析HTML文档

参考下面代码:
#include <stdio.h>
#include <streamhtmlparser/htmlparser.h>
int main(void)
{
unsigned int getchar_ret;
htmlparser_ctx *parser = htmlparser_new();
while ((getchar_ret = getchar()) != EOF) {
char c = (char)getchar_ret;
/* If we received a '$' character, we output the current tag and attribute
* * name to stdout. */
if (c == '$') {
printf("[[ ");
if (htmlparser_tag(parser)) printf("tag=%s ", htmlparser_tag(parser));
if (htmlparser_attr(parser)) printf("attr=%s ", htmlparser_attr(parser));
printf("]]");
/* If we read any other character, we pass it to the parser and echo it to
* * stdout. */
} else {
htmlparser_parse_chr(parser, c);
putchar(c);
}
}
}

⑹ c语言提取html中的信息

1. 如果你懂编程序:
使用字符串匹配算法,例如KMP算法,AC算法等。
AC算法比较好,网络上可能有现成的,弄一个源代码,再修改下就可以。

2. 如果你不懂编程:
用word,ultraedit等编辑工具,直接搜索你要的字符串就可以了吧。

⑺ c语言提取html标签内容

#include <stdio.h>
#include <math.h>
void fetch_str(char *str_in, char *str_out);
int main(){
char test[] = "<a>This is the <...> string</a>";
char result[256];
fetch_str(test, result);
printf("\ntest\t=%s\n", test);
printf("\nresult\t=%s\n",result);
return 1;
}

void fetch_str(char *str_in, char *str_out)
{
char begin_str[] = "<a>";
char end_str[] = "</a>";
int index_end =0;
int index_begin=0;
int flag_begin =0;
int flag_end =0;
int str_index=0;
int i;
// to find the max index of str_in
while(str_in[str_index]!='\0')
{
str_index++;
}
str_index--;

//printf("%s %s", begin_str, end_str);
int count=0;
while(str_in[count]!='\0')
{
// to find the begin index of the target string
if( flag_begin==0 && count<=(str_index-2) )
{
if( str_in[count]==begin_str[0] && str_in[count+1]==begin_str[1] && str_in[count+2]==begin_str[2] )
{
flag_begin=1;
index_begin=count+3;
}
}
// to find the end index of the target string
//if( flag_end==0 && count<=(str_index-3) )
if(count<=(str_index-3) )
{
if( str_in[count]==end_str[0] && str_in[count+1]==end_str[1] && str_in[count+2]==end_str[2] && str_in[count+3]==end_str[3])
{
flag_end=1;
index_end=count-1;
}
}

count++;
}

//printf("\nbegin_index=%d, end_index=%d\n", index_begin, index_end);
// to the target string to str_out
count=0;
for(i=index_begin;i<=index_end;i++)
{
str_out[count]=str_in[i];
count++;
}
str_out[count]='\0';
return;
}

⑻ 如何监听验证一个项目中的所有 input输入框 自动过滤 html标签 css样式 和js脚本之类的

<input onkeyup="usrNameSet(this)" />

其它的自己可以随便调用

Js部分

//只能输入数字、字母、小数点、汉字、@
function usrNameSet(num){

var str=num.value;
//var str = document.getElementById("userName").value;
var value=str.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\@\.]/g,'');
document.getElementById("userName").value=value;
}

//手机号码、手机验证码,只能输入数字
function numberSet(num){
var str=num.value;
var value=str.replace(/[^0-9]/g,'');
num.value=value;
}

//推广码验证,只能输入数字跟字母
function spreadCodeSet(num){
var str=num.value;
var value=str.replace(/[^\w\.\/]/g,'');
num.value=value;
}

//密码设置 不能为空格

function passwordSet(num){
/*
var str=document.getElementById("password").value;
var value=str.replace(/^ +| +$/g,'');
document.getElementById("password").value=value;
*/
var str=num.value;
var value=str.replace(/^ +| +$/g,'');
num.value=value;

}

//登陆验证码
//只能是4位字母或数字
function UserVerifycodeSet(){
var str=document.getElementById("verifycode").value;
var value=str.replace(/[^a-zA-Z0-9]/g,'');
document.getElementById("verifycode").value=value;
}

//姓名和身份证认证
function nameNumberSet(num){
if(num.id=='text_name')//姓名 只能输入汉字
{
var str=num.value;
var value=str.replace(/[^\u4E00-\u9FA5]/g,'');
num.value=value;
}
else if(num.id=='text_idcard'){//身份证 只能是数字和字母
var str=num.value;
var value=str.replace(/[^a-zA-Z0-9]/g,'');
num.value=value;
}
}

//邮箱输入 //只能输入数字、字母、小数点、汉字、@、-
function myMailSet(num){
var str=num.value;
var value = str.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\@\.\-\_]/g,'');
num.value=value;
}

//充值输入设置,小数点后只能两位
function moneyInput(num){
//var str=num.value;
//alert(str);
//var value=str.replace(function(){

//if(this.value==this.value2)return;if(this.value.search(/^\d*(?:\.\d{0,2})?$/)==-1)this.value=(this.value2)?this.value2:'';else
this.value2=this.value;
//})
//var value=str.toFixed(2);
// var value = str.replace(/[^a-zA-Z0-9]/g,'');
// num.value=value;
if(num.value==num.value2)return;
if(num.value.search(/^\d*(?:\.\d{0,2})?$/)==-1)
num.value=(num.value2)?num.value2:'';
else num.value2=num.value;
}

//地址输入设置
//只能输入数字、字母、

function addressSet(num){
var str=num.value;
var value=str.replace(/[^\u4e00-\u9fa5\w]/g,'');
num.value=value;
}

//银行卡输入设置

function formatBankNoSet(BankNo){
//alert(BankNo.value);
var str=BankNo.value;
var value=str.replace(/[^0-9]/g,'');
BankNo.value=value;
}

//只能输入字母、汉字
function cnOrEn(num){
var str=num.value;
var value=str.replace(/[^\a-zA-Z\u4E00-\u9FA5]/g,'');
num.value=value;
}

⑼ htmlpurifier过滤包起到什么作用

HTMLPurifier使用了白名单过滤机制,只有被设置允许的才会通过检验。
基本过滤事例
a、过滤掉文本中的所有html标签
/**
* 过滤掉所有html标签很简单,原因则在白名单机制完成
*/
$config->set('HTML.Allowed', '');
b、保留超链接标签a及其href链接地址属性,并自动添加target属性值为’_blank’
$config->set('HTML.Allowed', 'a[href]');
$config->set('HTML.TargetBlank', true);
c、自动完成段落代码并清除掉无用的空标签
// 让文本自动添加段落标签,前提是必须允许P标签的使用
$config->set('HTML.Allowed', 'p');
$config->set('AutoFormat.AutoParagraph', true);
// 清除空标签
$config->set('AutoFormat.RemoveEmpty', true);

⑽ c语言程序填空:将html文件中的htm标记过滤掉

11 "w"
12 fgetc(fin)
13 sc
14 fgetc(fin) == '\n'
15 fclose(fin)

阅读全文

与c过滤html代码相关的资料

热点内容
飞利浦和松下空气净化器怎么样 浏览:318
生活污水处理厂用什么设备 浏览:574
不锈钢蒸馏器操作视频 浏览:138
水处理膜ro膜国内企业 浏览:951
波轮洗衣机内桶过滤网 浏览:680
珠海滨海社区直饮水机多少钱一台 浏览:951
郑州市污水管网 浏览:376
蓝瑟空调滤芯在什么位置 浏览:666
什么时候用净化器 浏览:622
饮水机桶里面怎么清洗 浏览:868
框架结构伸缩缝防水处理 浏览:259
博越中央空气净化器滤芯怎么换 浏览:170
达芬奇颜色回批用什么格式 浏览:742
最好的水处理方法 浏览:288
离子交换法什么意思 浏览:968
清洗柴油滤芯怎么换 浏览:220
电热水器加入除垢剂 浏览:864
储水式电热水器免拆水垢工具除垢剂 浏览:164
净水器加盟商哪个好 浏览:896
双氧水加碱除垢功效会娇弱吗 浏览:957