当前位置: 首页> 最新文章列表> 如何使用 mb_eregi_replace 函数替换 HTML 标签中的特定内容(比如 <script> 标签里的内容)

如何使用 mb_eregi_replace 函数替换 HTML 标签中的特定内容(比如 <script> 标签里的内容)

M66 2025-06-23

在PHP中处理字符串时,经常需要对HTML代码中的特定标签内容进行替换。特别是在处理安全性相关的内容时,比如清理或修改 <script> 标签内的内容,避免XSS攻击。本文将介绍如何使用 mb_eregi_replace 函数来实现对HTML标签中特定内容的替换。


什么是 mb_eregi_replace?

mb_eregi_replace 是PHP中多字节字符串函数的一部分,支持正则表达式的不区分大小写替换功能。相比传统的 eregi_replace,它能够更好地处理UTF-8等多字节编码,适合处理中文及其他多字节字符集。

函数原型如下:

string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
  • $pattern:正则表达式模式(不区分大小写)

  • $replacement:替换内容

  • $string:输入字符串

  • $option:可选参数,默认是 "msr",表示多行模式、单行模式、支持UTF-8等


替换 <script> 标签中的内容

目标是匹配所有 <script> 标签内的内容,然后用自定义的字符串替换,避免直接执行或显示脚本内容。示例代码如下:

<?php
// 原始HTML字符串,包含<script>标签
$html = '<div>示例内容<script>alert("危险脚本");</script>更多内容</div>';

// 使用 mb_eregi_replace 替换 <script> 标签中的内容
// 正则表达式说明:
// <script[^>]*> 匹配<script>标签的开始,允许带属性
// .*? 非贪婪匹配<script>和</script>之间的所有内容
// </script> 匹配结束标签
$pattern = '<script[^>]*>.*?</script>';

// 替换为安全提示或空内容
$replacement = '<script>/* 脚本内容已被替换 */</script>';

// 执行替换
$safe_html = mb_eregi_replace($pattern, $replacement, $html);

echo $safe_html;
?>

输出结果:

<div>示例内容<script>/* 脚本内容已被替换 */</script>更多内容</div>

细节说明

  • mb_eregi_replace 默认不区分大小写,所以无论是 <script> 还是 <SCRIPT> 都能匹配。

  • 正则中的 .*? 是非贪婪模式,确保匹配到第一个 </script> 标签结束,避免匹配多余内容。

  • 如果需要匹配多行脚本内容,确保正则选项支持单行模式(.匹配换行符),默认为msr即可。


进阶应用:替换 URL 域名为 m66.net

假如你想替换 <script> 标签内的 URL,将所有URL中的域名替换为 m66.net,可以结合回调函数处理:

<?php
$html = '<script src="http://example.com/js/app.js"></script>';

// 先匹配<script>标签
$pattern = '<script[^>]*>.*?</script>';

$safe_html = mb_eregi_replace($pattern, function($matches) {
    $script_tag = $matches[0];
    // 替换 URL 域名为 m66.net,使用简单的正则替换
    $script_tag = preg_replace('#(https?://)([^/]+)#i', '$1m66.net', $script_tag);
    return $script_tag;
}, $html);

echo $safe_html;
?>

输出:

  • 相关标签:

    HTML