如何用用正则替换掉无用的html标签及某些标签内的无用属性

wzhiyuan 2007-06-18 09:05:07
应用背景:一个网页上有一个(textarea,我想允许用户可以加入少数几个html标签,其它的则全部过滤掉;在许可的这几个标签里,又是只允许几个属性,其它的则全部过滤掉。
比如,只允许加入p,br,img,a,这几个标签,其中,p,br,只允许一个标签名,不允许有属性,img 只许有src,width,height,alt,四个属性,a,只允许有href,target两个属性。
这样的过滤需求,怎么样来实现比较简洁?
先说一下你们的思路就行,具体代码先不用写。
...全文
403 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzhiyuan 2007-07-27
  • 打赏
  • 举报
回复
看了各位的回复之后,我也大略看了一下UBB,我的意思就是自己写类似UBB这些过滤函数,因为自己的要求(已上所举例只是要用到的一种情况)和通用的UBB有不少地方不太一样,不能直接拿来用,后来因为时间有限,加上本来实际要应用的问题取消,所以研究就放下了。
我自己已经写了一下,是在用php在服务器端处理的,因为php里的的正则感觉好象比javascript的强大一些。
有空再和各位就这个问题继续探讨。谢谢大家的回复。
csharpxml 2007-06-19
  • 打赏
  • 举报
回复
up
hbhbhbhbhb1021 2007-06-19
  • 打赏
  • 举报
回复
感觉最好使用类似UBB标签的那种安全些
hy_lihuan 2007-06-19
  • 打赏
  • 举报
回复
好像很难!至少我不会
gzdiablo 2007-06-19
  • 打赏
  • 举报
回复
其实写验证属性的表达式大概是这样的
/<标签名(?=[\s>])[^>]*?(?:(?:******)[^>]*?)*>/ig;
******部分:
(属性1\s*=\s*["']?[^"'\s>]*["']?)|(属性2\s*=\s*["']?[^"'\s>]*["']?)|(属性3\s*=\s*["']?[^"'\s>]*["']?)|

用程序生成很容易.具体你自己写了
replace的话一定要按照属性的数目来写4个属性<xxx $1 $2 $3 $4>.3个属性<xxx $1 $2 $3>.

至于实际标签有几个合法属性,他就会取出几个属性.没有的属性也不会出错
gzdiablo 2007-06-19
  • 打赏
  • 举报
回复
不小心按到提交了 继续:
var re = /<img[^>]*?(?:(?:(src\s*=\s*["']?[^"'\s>]*["']?)|(alt\s*=\s*["']?[^"'\s>]*["']?)|(width\s*=\s*["']?[^"'\s>]*["']?)|(height\s*=\s*["']?[^"'\s>]*["']?)|)[^>]*?)*>/ig;
str = str.replace(re,"<img $1 $2 $3 $4>");
var re = /<a(?=[\s>])[^>]*?(?:(?:(href\s*=\s*["']?[^"'\s>]*["']?)|(target\s*=\s*["']?[^"'\s>]*["']?)|)[^>]*?)*>/ig;
str = str.replace(re,"<a $1 $2>");
gzdiablo 2007-06-19
  • 打赏
  • 举报
回复
第一步 将非p br img a标签去掉
str = str.replace(/<(?!p|br|img|a(?=[\s>])|/p|/a)[^>]*>/ig,"");
第二步 标签合法性修改
str = str.replace(/<(p|img)[^>]*>/,"<$1>");
mingxuan3000 2007-06-19
  • 打赏
  • 举报
回复
如果嵌套的话,做起来麻烦
蒋晟 2007-06-18
  • 打赏
  • 举报
回复
UBB?

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧