写出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或类似的库。