PHP用正则把HTML中的js脚本过滤掉
要在PHP中使用正则表达式从HTML中过滤掉JavaScript脚本标签,你可以使用preg_replace
函数。以下是一个示例代码,展示了如何使用正则表达式来移除HTML中的<script>
标签及其内容:
<?php
function removeJavaScript($html) {
// 正则表达式模式,匹配 <script> 标签及其内容,包括 <script> 和 </script> 之间的任何内容
$pattern = '/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/is';
// 使用 preg_replace 替换匹配的内容为空字符串
$cleanedHtml = preg_replace($pattern, '', $html);
return $cleanedHtml;
}
// 示例HTML字符串
$html = '
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<script type="text/javascript">
alert("Hello, World!");
</script>
</head>
<body>
<h1>This is a heading</h1>
<p>This is a paragraph.</p>
<script>
console.log("Another script");
</script>
</body>
</html>
';
// 调用函数移除JavaScript
$cleanedHtml = removeJavaScript($html);
// 输出清理后的HTML
echo $cleanedHtml;
?>
解释
- 正则表达式模式:
/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/is
/<script\b[^<]*/
:匹配以<script
开头的标签,并允许标签内有属性(例如type="text/javascript"
)。(?:(?!<\/script>)<[^<]*)*
:这是一个非贪婪匹配,用于匹配<script>
标签和</script>
之间的任何内容,但不包括</script>
。<\/script>/
:匹配结束标签</script>
。i
:不区分大小写的匹配。s
:让.
匹配包括换行符在内的所有字符。
preg_replace
函数:- 使用上面定义的正则表达式模式,将匹配到的JavaScript脚本替换为空字符串。
- 示例HTML字符串:
- 包含一些示例HTML和一个
<script>
标签。
- 包含一些示例HTML和一个
- 输出清理后的HTML:
- 调用
removeJavaScript
函数后,输出不包含JavaScript脚本的HTML。
- 调用
这个示例代码会移除HTML中的所有JavaScript脚本标签及其内容,只留下纯HTML。如果你需要处理更复杂的HTML结构,可能需要使用更强大的HTML解析器,比如PHP的DOMDocument
类,但这通常超出了正则表达式的范围。