跳到主要内容

写出PHP正则表达式,过虑网页上的所有JS/VBS脚本?

参考答案:

要过滤网页上的所有JavaScript和VBScript脚本,你可以使用PHP的正则表达式功能。以下是一个简单的示例,它使用preg_replace函数来移除<script>标签及其内容:

<?php

function removeScripts($html) {
    // 移除JavaScript脚本
    $html = preg_replace(
        '/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/si',
        '',
        $html
    );
    
    // 移除VBScript脚本
    // VBScript 很少在现代网页中看到,但如果存在,这个正则也会尝试移除
    $html = preg_replace(
        '/<script\s+language=["\']?VBScript["\']?[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/si',
        '',
        $html
    );
    
    return $html;
}

// 示例用法
$htmlContent = '<html><body>
    <h1>Hello, World!</h1>
    <script type="text/javascript">
        alert("This is JavaScript");
    </script>
    <script language="VBScript">
        MsgBox("This is VBScript")
    </script>
</body></html>';

$cleanedHtml = removeScripts($htmlContent);
echo $cleanedHtml;

这段代码定义了一个removeScripts函数,它接受HTML内容作为输入,并使用两个正则表达式来移除JavaScript和VBScript脚本。然后,你可以调用这个函数并传入你的HTML内容来清理脚本。

注意:这种方法并不完美,特别是当<script>标签的属性顺序或结构发生变化时,或者当JavaScript或VBScript代码嵌入到其他HTML元素中时(例如,作为onclick事件的处理程序)。要完全、准确地移除所有脚本,你可能需要使用更复杂的HTML解析库,如PHP的DOMDocument或类似的库。