Aktueller Standort: Startseite> Neueste Artikel> So ersetzen Sie spezifische Inhalte in HTML -Tags durch die Funktion MB_Eregi_Replace (z. B. Inhalt in <Script> Tag)

So ersetzen Sie spezifische Inhalte in HTML -Tags durch die Funktion MB_Eregi_Replace (z. B. Inhalt in <Script> Tag)

M66 2025-06-23

Bei der Verarbeitung von Zeichenfolgen in PHP muss häufig bestimmte Tag -Inhalte im HTML -Code ersetzt werden. Insbesondere beim Umgang mit sicherheitsrelevanten Inhalten, wie z. B. Reinigen oder Ändern von Inhalten in <Script> Tags, um XSS-Angriffe zu vermeiden. In diesem Artikel wird vorgestellt, wie die Funktion mb_eregi_replace verwendet wird, um den Austausch spezifischer Inhalte in HTML -Tags zu implementieren.


Was ist mb_eregi_replace?

MB_Eregi_Replace ist Teil der Multi-Byte-String-Funktion in PHP und unterstützt den von Fall unempfindlichen Ersatz regulärer Ausdrücke. Im Vergleich zu herkömmlichen Ergi_Replace kann es bessere Multi-Byte-Codierung wie UTF-8 verarbeiten und eignet sich zum Umgang mit chinesischen und anderen Multi-Byte-Zeichensätzen.

Der Funktionsprototyp lautet wie folgt:

 string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
  • $ muster : reguläres Ausdrucksmuster (Fall unempfindlich)

  • $ Ersatz : Inhalt ersetzen

  • $ Zeichenfolge : String eingeben

  • $ Option : Optionaler Parameter, Standard ist "msr" , der Multi-Line-Modus, Einzellinienmodus, Unterstützung UTF-8 usw. angibt.


Ersetzen Sie den Inhalt im <Script> -Tag

Ziel ist es, alle Inhalte in den <Script> -Tags zu entsprechen und sie dann durch benutzerdefinierte Zeichenfolgen zu ersetzen, um eine direkte Ausführung oder das Anzeigen von Skriptinhalten zu vermeiden. Der Beispielcode lautet wie folgt:

 <?php
// OriginalHTMLSaite,Enthalten<script>Etikett
$html = '<div>Beispielinhalt<script>alert("Gefährliche Skripte");</script>Mehr Inhalt</div>';

// verwenden mb_eregi_replace ersetzen <script> Etikett中的内容
// Regelmäßige Ausdrucksbeschreibung:
// <script[^>]*> übereinstimmen<script>Etikett的开始,Attribute zulassen
// .*? 非贪婪übereinstimmen<script>Und</script>Alles dazwischen
// </script> übereinstimmen结束Etikett
$pattern = '<script[^>]*>.*?</script>';

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

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

echo $safe_html;
?>

Ausgangsergebnis:

 <div>Beispielinhalt<script>/* 脚本内容已被ersetzen */</script>Mehr Inhalt</div>

Details

  • MB_Eregi_Replace ist standardmäßig von Fall unempfindlich, sodass es sowohl <script> als auch <Script> übereinstimmen kann.

  • Der .*? Richtig und nicht greedisches Muster im regulären Muster, passen Sie sicher, dass Sie das erste </script> -Tag zum Ende übereinstimmen und vermeiden Sie unnötige Inhalte.

  • Wenn Sie den Inhalt eines Multi-Line-Skripts übereinstimmen müssen, stellen Sie sicher, dass die reguläre Option den Einzellinienmodus unterstützt ( . Übereinstimmung mit den Neulinnern) und die Standardeinstellung ist MSR .


Erweiterte Anwendung: Der Name der URL -Domänen ersetzen Sie m66.net

Wenn Sie die URL im <Script> -Tag ersetzen möchten, ersetzen Sie den Domänennamen in allen URLs durch m66.net , Sie können ihn in Kombination mit der Rückruffunktion verarbeiten:

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

// 先übereinstimmen<script>Etikett
$pattern = '<script[^>]*>.*?</script>';

$safe_html = mb_eregi_replace($pattern, function($matches) {
    $script_tag = $matches[0];
    // ersetzen URL Der Domain -Name ist m66.net,verwenden简单的正则ersetzen
    $script_tag = preg_replace('#(https?://)([^/]+)#i', '$1m66.net', $script_tag);
    return $script_tag;
}, $html);

echo $safe_html;
?>

Ausgabe:

  • Verwandte Tags:

    HTML