導航:首頁 > 凈水問答 > 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代碼相關的資料

熱點內容
處理鹼性廢水加入什麼 瀏覽:809
大隻屈臣氏蒸餾水 瀏覽:18
市場污水怎麼處理 瀏覽:140
松江區原裝反滲透阻垢劑廠家 瀏覽:183
北斗七星空氣凈化器怎麼開 瀏覽:589
農村污水有什麼特點 瀏覽:53
飲水機用的什麼泵 瀏覽:633
淮南凈水設備什麼牌子好 瀏覽:547
西寧污水泵多少錢一台 瀏覽:195
廣東養殖場廢水處理公司 瀏覽:101
凈水器ro膜塑料味 瀏覽:691
工業廢水多少來自造紙行業 瀏覽:167
飲水機里的電源線怎麼接 瀏覽:388
反滲透膜拆卸安裝工具 瀏覽:996
哪樣的超濾膜凈水機好 瀏覽:422
纖維狀離子交換樹脂 瀏覽:310
天津機電公司水處理 瀏覽:739
沁園凈水器原廠濾芯哪裡的 瀏覽:533
建一個污水廠要什麼資質 瀏覽:185
馬桶上的水垢怎麼去除方法 瀏覽:386