【问题标题】:Remove tag and content in between using REGEX/PHP使用 REGEX/PHP 删除标签和内容
【发布时间】:2012-04-11 10:33:44
【问题描述】:

我已经在 stackoverflow 上看到过这个问题被问了几次,但没有一个非常棒的答案。 答案似乎总是“不要使用正则表达式”,没有任何示例更好的选择。

出于我的目的,这不是为了验证,而是在事实剥离之后。

我需要删除所有script 标签,包括它们之间可能存在的任何内容。

对执行此操作的最佳 REGEX 方式有何建议?

编辑:抢先响应:我不能使用 HTML Purifier 也不能使用 PHP 的 DOMXPath 功能。

【问题讨论】:

标签: php regex


【解决方案1】:

HTML 的 REGEX 之所以被认为是邪恶的,是因为它(通常)很容易被破坏,迫使您反复重新考虑您的模式。例如,如果您正在匹配

<script>.+</script>

它很容易被破坏

<script type="text/javascript">

如果你使用

<script.+/script>

也可以轻松破解

< script>...

这没有尽头。如果您不能使用您所说的任何方法,您可以尝试strip_tags,但它需要 whitelist 作为参数,而不是黑名单,这意味着您需要手动允许你想允许的每一个标签。

如果一切都失败了,你可以求助于 RegEx,我想出的是这个

<\s*script.*/script>

但我敢打赌,附近的人也可能会来破坏它。

【讨论】:

  • 谢谢!就像我上面说的,这不是关于验证,而是删除已经存在的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 2013-03-24
相关资源
最近更新 更多