为了账号安全,请及时绑定邮箱和手机立即绑定

从HTML内容中删除脚本标记

/ 猿问

从HTML内容中删除脚本标记

沧海一幻觉 2019-08-17 16:03:46

从HTML内容中删除脚本标记

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

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

我怎样才能做到这一点?

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


查看完整描述

3 回答

?
慕雪9262066

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


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

但是,正则表达式不是用于解析HTML / XML,即使你写出最终会破坏的完美表达式,也不值得,但在某些情况下,快速修复某些标记很有用,而且快速修复时,忘记安全。仅对您信任的内容/标记使用正则表达式。


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


这里更好的解决方案是使用DOMDocument专为此设计的解决方案。这是一个片段,演示了如何轻松,干净(与正则表达式相比),(几乎)可靠和(几乎)安全是这样做的:


<?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,因为即使这样也可以使用bork。


查看完整回答
反对 回复 2019-08-17
?
翻过高山走不出你

使用PHP DOMDocument解析器。

$doc = new DOMDocument();// load the HTML string we want to strip$doc->loadHTML($html);// get all the script tags$script_tags = $doc->getElementsByTagName('script');$length = $script_tags->length;// for each tag, remove it from the DOMfor ($i = 0; $i < $length; $i++) {
  $script_tags->item($i)->parentNode->removeChild($script_tags->item($i));}// get the HTML string back$no_script_html_string = $doc->saveHTML();

这让我使用以下HTML文档:

<!doctype html><html>
    <head>
        <meta charset="utf-8">
        <title>
            hey        </title>
        <script>
            alert("hello");
        </script>
    </head>
    <body>
        hey    </body></html>

请记住,DOMDocument解析器需要PHP 5或更高版本。


查看完整回答
反对 回复 2019-08-17
?
守着星空守着你
$html = <<<HTML...HTML;$dom = new DOMDocument();$dom->loadHTML($html);$tags_to_remove = array('script','style','iframe','link');foreach($tags_to_remove as $tag){
    $element = $dom->getElementsByTagName($tag);
    foreach($element  as $item){
        $item->parentNode->removeChild($item);
    }}$html = $dom->saveHTML();


查看完整回答
反对 回复 2019-08-17

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信