跳到主要内容

PHP写出用正则把HTML中的js脚本过滤掉?

参考答案:

要使用PHP和正则表达式来过滤HTML中的JavaScript脚本,你可以使用preg_replace函数。但是,请注意,使用正则表达式来解析或过滤HTML通常不是一个好的做法,因为HTML的结构可能会变得相当复杂,并且正则表达式很难完全覆盖所有的情况。更推荐的方法是使用专门的HTML解析库,如PHP的DOMDocument

不过,如果你只是想用正则表达式进行简单的过滤,以下是一个示例:

<?php

function removeJavaScript($html) {
    $pattern = "/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/si";
    return preg_replace($pattern, "", $html);
}

$html = '... your HTML content with JavaScript scripts ...';
$filteredHtml = removeJavaScript($html);

echo $filteredHtml;

?>

这个正则表达式会匹配<script>标签及其内容,并将其替换为空字符串。但是,请注意,这个正则表达式可能无法处理所有情况,特别是当JavaScript代码嵌入在HTML属性或注释中时。

更健壮的方法是使用DOMDocument或其他HTML解析库来遍历HTML文档,并删除<script>节点。以下是使用DOMDocument的一个简单示例:

<?php

function removeJavaScript($html) {
    $dom = new DOMDocument();
    $dom->loadHTML('<?xml encoding="UTF-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $scripts = $dom->getElementsByTagName('script');
    
    foreach ($scripts as $script) {
        $script->parentNode->removeChild($script);
    }
    
    return trim($dom->saveHTML());
}

$html = '... your HTML content with JavaScript scripts ...';
$filteredHtml = removeJavaScript($html);

echo $filteredHtml;

?>

这种方法更加可靠,并且能够处理更复杂的HTML结构。