當前位置: 首頁> 最新文章列表> 如何使用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