用php写一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉)
封面图
•
2025-09-30
•
PHP
133
0
0
0
你可以使用 PHP 的 `preg_replace` 函数配合正则表达式来过滤网页中的所有 `<script>` 和 `<vbscript>` 标签及其内容。以下是一个示例代码: ```php <?php // 原始 HTML 内容 $html = <<<HTML <html> <head> <title>Test</title> </head> <body> <p>This is a test.</p> <script>alert('Hello');</script> <vbscript>MsgBox "Hello"</vbscript> <p>Another paragraph.</p> </body> </html> HTML; // 正则表达式:匹配 script 和 vbscript 标签及其内容(包括跨行) $pattern = '/<script\b[^>]*>(.*?)<\/script>/is'; $html = preg_replace($pattern, '', $html); $pattern_vbscript = '/<vbscript\b[^>]*>(.*?)<\/vbscript>/is'; $html = preg_replace($pattern_vbscript, '', $html); // 输出处理后的 HTML echo $html; ?> ``` ### 说明: - `/i`:不区分大小写(例如匹配 `<SCRIPT>` 或 `<Script>`)。 - `/s`:让 `.` 匹配换行符,这样可以匹配多行的脚本内容。 - `.*?`:非贪婪匹配,尽可能少地匹配内容。 ### 注意事项: - 这个正则表达式可能无法处理所有复杂情况(如嵌套标签、动态生成的脚本等),但对大多数常见情况是有效的。 - 如果你希望更安全地过滤 HTML,建议使用专门的 HTML 解析库(如 [DOMDocument](https://www.php.net/manual/en/class.domdocument.php) 或 [HTML Purifier](http://htmlpurifier.org/))。 ### 使用 DOMDocument 的简单示例(推荐): ```php <?php $html = <<<HTML <html> <head> <title>Test</title> </head> <body> <p>This is a test.</p> <script>alert('Hello');</script> <vbscript>MsgBox "Hello"</vbscript> <p>Another paragraph.</p> </body> </html> HTML; $doc = new DOMDocument(); @$doc->loadHTML($html); // 使用 @ 抑制警告 // 移除所有 script 标签 $scripts = $doc->getElementsByTagName('script'); while ($script = $scripts->item(0)) { $script->parentNode->removeChild($script); } // 移除所有 vbscript 标签 $vbscripts = $doc->getElementsByTagName('vbscript'); while ($vbscript = $vbscripts->item(0)) { $vbscript->parentNode->removeChild($vbscript); } // 获取清理后的 HTML $clean_html = $doc->saveHTML(); echo $clean_html; ?> ``` 这种方式更安全、可靠,适合生产环境使用。
上一篇:
详细介绍PHP中static静态变量
下一篇:
PHP开发工程师岗位自我评价怎么写
标题录入,一次不能超过6条
返回顶部
留言
留言
评论