HTML代码过滤函数

/////////////////////////////////////////////////////////////////////
//
//  在线编辑器过滤函数:FiltrationHTML
//  作用:把从word、IE拷贝来的数据过滤,保留需要的标记及属性,去掉多
//        余,统一页面样式。
//  过滤:保留<p><sup><sub><table><tr><td><img><br>标记,以及<td>中的
//        colspan、rowspan属性,其它标记及属性全部清除。为表格替换统
//        一样式。
//  原理:先用特殊字符串"『〈"和"〉』"替换需要保留的标记"<"和">",然
//        后去掉不需要的,再把特殊字符恢复原状。这种字符串组合基本可
//        以避免被用户误输入,也可换成其它的。
//  缺点:过滤还不是特别全面。因为要复制的内容千变万化,有些特殊情况
//        没有解决。
//        在线编辑器会自动产生某些标记,<TBODY><a>,无法解决。
//  最后修改时间:2004.7.26 土狗
//
/////////////////////////////////////////////////////////////////////
function FiltrationHTML(HTML)
{
 var temp = HTML;
 temp = temp.replace(/<script[^>]*?>(.|/n)*?<//script>/gim,""); //过滤<script></script>块
 temp = temp.replace(/<(p |p>)/gi,  "『〈$1"); //分段  <p>
 temp = temp.replace(/<(//p)/gi,   "『〈$1"); //分段  </p>
 temp = temp.replace(/<(sup>)/gi,  "『〈$1"); //上标  <sup>
 temp = temp.replace(/<(//sup)/gi,  "『〈$1"); //上标末 </sup>
 temp = temp.replace(/<(sub)/gi,   "『〈$1"); //下标  <sub>
 temp = temp.replace(/<(//sub)/gi,  "『〈$1"); //下标末 </sub>
 temp = temp.replace(/<(table)/gi,  "『〈$1"); //表格  <table>
 temp = temp.replace(/<(//table)/gi, "『〈$1"); //表格末 </table>
 temp = temp.replace(/<(tr |tr>)/gi, "『〈$1"); //行   <tr>
 temp = temp.replace(/<(//tr)/gi,  "『〈$1"); //行末  </tr>
 temp = temp.replace(/<(td |td>)/gi, "『〈$1");//列    <td>
 temp = temp.replace(/<(//td)/gi,  "『〈$1"); //列末  </td>
 temp = temp.replace(/<(img )/gi,  "『〈$1"); //图片  <img>
 temp = temp.replace(/<(br)/gi,   "『〈$1"); //换行符 <br>
 temp = temp.replace(/(『〈[^>]*)>/gi,"$1〉』"); //右括号

 temp = temp.replace(/<[^>]*>/gi,"");   //过滤其它所有"<...>"标签
 temp = temp.replace(//&nbsp;/gi," ");   //替换所有&nbsp;为空格

 temp = temp.replace(/『〈/gi,"<");    //恢复<
 temp = temp.replace(/〉』/gi,">");    //恢复>

 temp = temp.replace(/(<table)[^>]*(>)/gi,"$1 border=/"1/" cellpadding=/"1/" cellspacing=/"1/" style=/"border-collapse: collapse/" bordercolor=/"#333333/" width=/"100/%/"$2"); //清除表格属性并加样式
 temp = temp.replace(/(<[^>]*)colspan(=[^/s>]*)/gi,"$1 『col$2』"); //给<td>中需要的属性加『』
 temp = temp.replace(/(<[^>]*)rowspan(=[^/s>]*)/gi,"$1 『row$2』"); //给<td>中需要的属性加『』

 temp = temp.replace(/(<tr)[^>]*(>)/gi,"$1$2");    //清除TR属性
 temp = temp.replace(/(<td)[^>『]*(>)/gi,"$1$2");   //清除不包含『』的TD的属性
 temp = temp.replace(/(<td)[^>『]*『/gi,"$1『");    //替换 <td...『之间内容
 temp = temp.replace(/(<[^>』]*』)[^>]*(『[^>『]*>)/gi,"$1$2");  //替换『』...『』之间内容
 temp = temp.replace(/(』)[^>』]*(>)/gi,"$1$2");    //替换『』...>之间内容
 temp = temp.replace(/<p[^>]*>/gi,"<p>");    //清除<p>中多余属性

 temp = temp.replace(/『(col)(=/d{1,4})』/gi," $1"+"span"+"$2");  //还原  colspan
 temp = temp.replace(/『(row)(=/d{1,4})』/gi," $1"+"span"+"$2");  //还原  rowspan
 temp = temp.replace(/(<img)[^>]*(>)/gi,"$1 src=/"/""+"$2");  //替换  <img>
 
 return temp;
}

阅读更多
个人分类: JavaScript
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭