如何从字符串中去除特定标签和特定属性?

2023-12-12

事情是这样的,我正在做一个项目来帮助人们教授 HTML。我自然是害怕史蒂夫那个渣男(见图1)。

所以我想阻止ALLHTML 标签,except那些在非常具体的情况下批准的白名单.

在那些已批准的 HTML 标签中,我想删除有害的属性以及。例如onload and onmouseover. Also, 根据一个白名单.

我考虑过正则表达式,但我很确定它是邪恶的并且对工作没有多大帮助。

有人能给我一个正确的方向吗?

提前致谢。


Fig 1.

Scumbag Steve


  • demo: http://so.devilmaycode.it/how-to-strip-specific-tags-and-specific-attributes-from-a-string/
require_once 'library/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();

 // this one is needed cause otherwise stuff 
 // considered harmful like input's will automatically be deleted
$config->set('HTML.Trusted', true);

// this line say that only input, p, div will be accepted
$config->set('HTML.AllowedElements', 'input,p,div');

// set attributes for each tag
$config->set('HTML.AllowedAttributes', 'input.type,input.name,p.id,div.style');

// more extensive way of manage attribute and elements... see the docs
// http://htmlpurifier.org/live/configdoc/plain.html
$def = $config->getHTMLDefinition(true);

$def->addAttribute('input', 'type', 'Enum#text');
$def->addAttribute('input', 'name', 'Text');

// call...
$purifier = new HTMLPurifier($config);

// display...
$html = $purifier->purify($raw_html);
  • NOTE:正如您所要求的,此代码将作为白名单运行,仅接受输入、p 和 div,并且仅接受某些属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从字符串中去除特定标签和特定属性? 的相关文章

随机推荐

  • 无需清除即可重新喷漆

    我正在开发一个模仿 Paint 的程序 问题是当我绘制新形状时 以前的形状会被删除 我试图注释掉我对paintComponents的超级调用 它可以工作 但留下了太多的绘图 import java awt Color import java
  • Jersey Multipart - 缺少起始边界

    我有一个带有 Netty 的 jersy 2 13 服务器应用程序 我尝试上传带有 multipart form data 的文件 但出现此错误 错误信息 7605 10 01 49 309 child group 3 1 org jvne
  • SQL自动增量id具有重复值和多列主键?

    CREATE TABLE Apps id int NOT NULL company varChar 20 NOT NULL name varChar 20 NOT NULL CONSTRAINT company app id PRIMARY
  • Go 中的通用哈希图

    我正在尝试制作一个包装纸map输入以便我可以添加一些方法 例如contains 这几乎让我怀念Java 但是 我不知道我是否可以在Java中做类似泛型的事情 虽然我读过的几乎所有内容都说 Go 没有泛型类型 但肯定有一种更好的方法 而不是为
  • 如何仅使用私钥文件创建java密钥库?

    我只有一个私钥作为 key 文件 没有其他 crt 或 ca 内容 我需要用它创建一个 java 密钥库 如何转换呢 到目前为止我尝试过的 我将 key 文件重命名为 pem 我使用 openssl 从 pem 中创建了 p12 文件 最后
  • 使用 Gnome-Shell JS 接口获取联系人列表

    我刚刚开始摆弄编写 gnome shell 扩展 并且想知道如何获取用户的联系人列表 我已经找到了一些可能的文件 gnome shell js ui contactDisplay js and gnome shell src shell c
  • 将命令输出解析为变量 LIVE(网络流量监控)

    我正在用 bash 编写一个网络监控脚本 我使用的基本命令是ettercap T M ARP i en1 然后我用管道egrep color Host GET 进去 我得到的示例输出如下所示 GET images srpr logo11w
  • 如何比较sql中的长文本和日期值?

    我以 dd mm yyyy 格式存储日期值作为长文本 我需要将此值与CURDATE 在一个SELECT陈述 请不要问我为什么要以长文本形式保存 有什么办法可以做到吗 这段代码当然不起作用 但它说明了我想要做的事情 WHERE longtex
  • UWP 尝试使用附加的依赖属性对滚动查看器进行动画处理

    我正在尝试在 UWP 中对滚动查看器的水平偏移进行动画处理 但动画目标未识别附加属性
  • 为什么 DateTime.ToString("dd/MM/yyyy") 给我 dd-MM-yyyy ?

    我希望将我的日期时间转换为格式为 dd MM yyyy 的字符串 每当我使用它进行转换时DateTime ToString dd MM yyyy I get dd MM yyyy反而 我必须设置某种文化信息吗 斜杠是日期分隔符 因此将使用当
  • 如何找出 .net 类实现了哪些接口?

    好的 我最近一直在学习 c 和 net c 文档中似乎缺少一件事http msdn microsoft com java 文档中存在 例如数组列表文档 是一个java类的文档会这样说 所有实现的接口 可序列化 可克隆 可迭代 集合 列表 随
  • 如何禁用 grails 中的 log4j 插件?

    看来Grails 2 1 log4j 插件在 grails 应用程序初始化期间重置 log4j 配置 请参阅下面的堆栈跟踪 at org apache log4j LogManager resetConfiguration LogManag
  • 使用 Spark 从 Scala 中的 Dataframe 中的数组列中删除 null (1.6)

    我有一个带有 id 列的数据框和一个具有结构数组的列 架构 root id string nullable true desc array nullable false element struct containsNull true na
  • 提交 HTML 表单后,如何使用 FastAPI 将用户重定向回主页?

    我有一个包含学生表格的页面 我添加了一个按钮 允许您向表中添加新行 为此 我将用户重定向到带有输入表单的页面 问题是 提交完成的表单后 用户会转到一个新的空白页面 如何传输已完成表单中的数据并将用户重定向回表格 我刚刚开始学习Web编程 所
  • Eclipse 插件 - 如何获取编辑器的最后工作

    我正在编写一个 Eclipse 插件 它通过几个按钮向用户公开一个视图 单击任何按钮时 我想将特定注释粘贴到用户当前正在工作的编辑器窗口中以及他指向的光标位置 一旦用户单击该按钮 编辑器窗口就不再具有焦点 并且以下代码不起作用 workbe
  • 来自参数的 Azure 数据工厂源数据集值

    我在 Azure Datafactory 中有一个由 CSV 文件支持的数据集 我在数据集中添加了一个附加列 并希望从数据集参数传递它的值 但值永远不会复制到该列 type AzureBlob structure name MyField
  • 在 where 子句中使用局部变量的替代方法

    我有一个查询 其中有一个使用多个局部变量构建的 where 子句 但这非常慢 以下是一个粗略的示例 因为我当前无权访问该查询 declare a varchar 50 b varchar 50 c varchar 50 set a set
  • 如何配置 ESLint 以允许粗箭头类方法

    ESLint 正在抛出一个Parsing error Unexpected token 当我尝试 lint 我的 Es6 类时出错 我缺少什么配置参数来启用 eslint 中的胖箭头类方法 示例类 class App extends Rea
  • 在 Haskell 中如何轮询文件、套接字或句柄以使其可读/可写?

    我如何从 Haskell 观看多个文件 套接字并等待它们变得可读 可写 Haskell 中有类似 select epoll 的东西吗 或者我被迫为每个文件 套接字生成一个线程 并始终使用该线程内的阻塞资源 这个问题是错误的 你不是force
  • 如何从字符串中去除特定标签和特定属性?

    事情是这样的 我正在做一个项目来帮助人们教授 HTML 我自然是害怕史蒂夫那个渣男 见图1 所以我想阻止ALLHTML 标签 except那些在非常具体的情况下批准的白名单 在那些已批准的 HTML 标签中 我想删除有害的属性以及 例如on