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.
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.
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>
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 .
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