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结构。