当前位置: 首页 > article >正文

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;
?>

解释

  1. 正则表达式模式
    • /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/is
    • /<script\b[^<]*/:匹配以<script开头的标签,并允许标签内有属性(例如type="text/javascript")。
    • (?:(?!<\/script>)<[^<]*)*:这是一个非贪婪匹配,用于匹配<script>标签和</script>之间的任何内容,但不包括</script>
    • <\/script>/:匹配结束标签</script>
    • i:不区分大小写的匹配。
    • s:让.匹配包括换行符在内的所有字符。
  2. preg_replace函数
    • 使用上面定义的正则表达式模式,将匹配到的JavaScript脚本替换为空字符串。
  3. 示例HTML字符串
    • 包含一些示例HTML和一个<script>标签。
  4. 输出清理后的HTML
    • 调用removeJavaScript函数后,输出不包含JavaScript脚本的HTML。

这个示例代码会移除HTML中的所有JavaScript脚本标签及其内容,只留下纯HTML。如果你需要处理更复杂的HTML结构,可能需要使用更强大的HTML解析器,比如PHP的DOMDocument类,但这通常超出了正则表达式的范围。


http://www.kler.cn/a/415529.html

相关文章:

  • Spring Data
  • Tülu 3:重新定义开源大模型的后训练范式
  • flutter 解决webview加载重定向h5页面 返回重复加载问题
  • SQLModel入门
  • 使用 Docker Compose 来编排部署LMTNR项目
  • 浏览器开发工具
  • 李春葆《数据结构》-查找-课后习题代码题
  • TiDB 架构
  • mysql集群NDB方式部署
  • 基于Java Springboot 易家宜超市云购物系统
  • Conda 管理python开发环境
  • npm和pnpm区别
  • CIKM23|基于会话推荐的因果关系引导图学习
  • OpenAI:2025年ChatGPT将成为“企业大脑”,并向Agent过渡
  • 【科研】9如何高效阅读和理解学术论文
  • Ps:存储 Adobe PDF - 输出
  • 零售餐饮收银台源码
  • 龙迅#LT8711GX适用于Type-C/DP1.4a 转 HDMI2.1 应用领域,分辨率高达8K30HZ,内置程序,可提供技术支持!
  • Linux 命令 pwd:探索当前工作目录的奥秘
  • Nginx篇之实现nginx转发兼容HTTP和Websocket两种协议
  • [CA] 尝试深入理解core.cpp -1
  • C++11-lambda表达式
  • mac maven编译出现问题
  • 回文链表(java)
  • Swift——类与结构体
  • 力扣刷题TOP101:6.BM7 链表中环的入口结点