【发布时间】:2019-03-12 16:41:48
【问题描述】:
我正在尝试使用 preg_replace 编写一个 php 函数,该函数删除 html 元素的所有内联属性,但想留下一些像 'href'、'title'、'alt' 之类的东西。
到目前为止我得到的是
([\w\-.:]+)\s*=\s*("[^"]*"|'[^']*'|[\w\-.:]+)
用于标记所有内联元素,但仍需要类似文本
href="test" Test
它周围没有任何 html,此外,它采用 all 内联属性。 在此处查看我的示例文本:
[https://regex101.com/r/3OVaO2/1][1]
目标是删除任何危险的 html 元素。 我知道我必须在一个额外的函数中为 href 属性处理一些事情。
【问题讨论】:
-
我假设内联元素是指标签的属性?
-
正则表达式不太适合这个任务;你需要一个合适的 HTML 解析器。您需要注意两件事:attribute values are not always quoted 和 can contain line breaks。
-
元素≠属性
-
你说“想留下一些像'href'”和“目标是删除任何危险的html元素”——但是
href是一个危险的属性,可以用来触发XSS攻击。