当前位置: 首页 > 面试题库 >

从HTML内容中删除脚本标签

贲绪
2023-03-14
问题内容

我正在使用HTML Purifier(http://htmlpurifier.org/)

我只想删除<script>标签。我不想删除内联格式或任何其他内容。

我该如何实现?

还有一件事,它还有其他方法可以从HTML删除脚本标签


问题答案:

因为这个问题是用正则表达式标记的,所以在这种情况下,我将用穷人的解决方案来回答:

$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);

但是,正则表达式不是用于解析HTML / XML的,即使您编写了一个 完美的
表达式也可能最终会破坏它,这是不值得的,尽管在某些情况下,快速修复某些标记很有用,而对于快速修复来说,忘记 安全
。仅在您信任的内容/标记上使用正则表达式。

请记住,用户输入的任何内容均应视为 不安全的

更好的
解决方案是使用DOMDocument为此目的而设计的解决方案。下面的代码片段演示了如何轻松,干净(与regex相比),(几乎)可靠和(几乎)安全来执行相同操作:

<?php

$html = <<<HTML
...
HTML;

$dom = new DOMDocument();

$dom->loadHTML($html);

$script = $dom->getElementsByTagName('script');

$remove = [];
foreach($script as $item)
{
  $remove[] = $item;
}

foreach ($remove as $item)
{
  $item->parentNode->removeChild($item); 
}

$html = $dom->saveHTML();

我故意删除了HTML,因为即使这样也可能会 出错



 类似资料:
  • 想改进这个问题吗?通过编辑这篇文章添加细节并澄清问题。 我有一个大的html内容。因此,我必须从HTML内容中删除以下文本。 在上面提到的代码段中,“{内部文本可以是任何内容}”表示可以是任何文本。 在整个HTML中,无论 存在,它将被一些固定的文本替换。 谁能建议这个需求的正则表达式是什么?

  • 问题内容: 有没有一种简单的方法可以在JavaScript中获取html字符串并去除html? 问题答案: 如果您在浏览器中运行,那么最简单的方法就是让浏览器为您完成… 注意:正如人们在评论中所指出的那样,如果您不控制HTML的源代码(例如,请勿在可能来自用户输入的任何内容上运行此代码),则最好避免这种情况。对于这些情况,您仍然可以让浏览器为您完成工作-

  • 问题内容: 有没有一种简单的方法可以在JavaScript中获取html字符串并去除html? 问题答案: 如果您在浏览器中运行,那么最简单的方法就是让浏览器为您完成… 注意:正如人们在评论中所指出的那样,如果您不控制HTML的源代码(例如,请勿在可能来自用户输入的任何内容上运行此代码),则最好避免这种情况。对于这些情况,您仍然可以让浏览器为您完成工作。

  • 问题内容: 我需要使用sed命令使用bash脚本从html中删除所有标签。我尝试了这个 和这 但我仍然想念什么,有什么建议吗? 问题答案: 您可以使用许多HTML到文本转换器之一,可以使用Perl regex,或者必须使用 如果没有错误的余地,请改用HTML解析器。例如,当元素分布在两行上时 此正则表达式将不起作用。 这正则表达式由三个部分组成,, 寻找开放 后面跟着零个或多个字符(不是结尾) 是

  • 问题内容: 是否有从Java字符串中删除HTML的好方法?一个简单的正则表达式 会起作用,但是不会正确转换,并且两个尖括号之间的非HTML也会被删除(即,正则表达式中的将会消失)。 问题答案: 使用HTML解析器代替正则表达式。对于Jsoup来说,这简直太简单了。 Jsoup还支持对可定制的白名单,如果你希望只允许例如这是非常有用的去除HTML标签,和。

  • 问题内容: 我想在pastebin上将脚本标签从此html中剥离 http://pastebin.com/mdxygM0a 我尝试使用以下正则表达式 但是它不会删除html中的所有脚本标签。它仅删除嵌入式脚本。请我需要一个可以删除所有脚本标签(行内和多行)的正则表达式。如果对我的样本http://pastebin.com/mdxygM0a进行测试,将不胜感激 谢谢 问题答案: 尝试使用正则表达式删