Aktueller Standort: Startseite> Neueste Artikel> Wie kann ich illegale Zeichen in Saiten vorbereiten, bevor Sie die Funktion mb_eregi_replace verwenden, um regelmäßiges Ausfall zu verhindern?

Wie kann ich illegale Zeichen in Saiten vorbereiten, bevor Sie die Funktion mb_eregi_replace verwenden, um regelmäßiges Ausfall zu verhindern?

M66 2025-06-15

In PHP wird die Funktion mb_eregi_replace verwendet, um einen regelmäßigen Austausch von Multibyte -Zeichen durchzuführen und den Fall zu ignorieren. Es ist sehr nützlich für die Behandlung von Multibyte-kodierten Zeichenfolgen wie UTF-8. Wenn jedoch die Eingabezeichenfolge einige illegale Zeichen enthält (z. B. Sonderzeichen regulärer Ausdrücke nicht entkommen), führt dies häufig zu einem regelmäßigen Übereinstimmungsfehler oder einer Fehlerberichterstattung.

In diesem Artikel wird vorgestellt, wie Sie Zeichenfolgen vorbereiten, bevor Sie die Funktion mb_eregi_replace verwenden, um das Problem des regelmäßigen Ausdrucksfehlers aufgrund illegaler Zeichen zu vermeiden.


1. Problemhintergrund

Der erste Parameter von mb_eregi_replace ist ein reguläres Expressionsmuster, der zweite Parameter ist der Ersatzinhalt, und der dritte Parameter ist der zu verarbeitende String.

Beispiel:

 <?php
$text = "Hello World!";
$pattern = "world";
$replacement = "PHP";

echo mb_eregi_replace($pattern, $replacement, $text);
?>

Die Ausgabe ist:

 Hello PHP!

Aber wenn $ muster oder anstehende Zeichenfolge unabgeordnete Sonderzeichen enthält, kann das Match scheitern und sogar eine Warnung wird geworfen.


2. illegale Charaktere, die regelmäßig scheitern können

Zu den Zeichen mit besonderer Bedeutung in regulären Ausdrücken gehören:

 . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

Wenn diese Zeichen im Muster oder in der zu ersetzenden Zeichenfolge erscheinen, müssen sie korrekt entkommen.


3.. Vorverarbeitungsschritte

3.1 Flucht reguläre Sonderzeichen

PHPs eigene Funktion preg_quote () kann den Sonderzeichen in regulären Ausdrücken entkommen. MB_Eregi_Replace verwendet jedoch die Regelmäßigkeit der Mbregex -Erweiterung, nicht die PREG_* -Serie PCRE, und die Escape -Regeln sind etwas unterschiedlich, aber normalerweise entkommt Preg_quote die meisten Sonderzeichen sind noch gültig.

Beispiel:

 <?php
$pattern_raw = "hello.world"; // . Es ist ein besonderer Charakter
$pattern = preg_quote($pattern_raw, '/'); // Fliehen as hello\.world

$text = "Hello World! hello.world test.";

echo mb_eregi_replace($pattern, "PHP", $text);
?>

Ausgabe:

 Hello World! PHP test.

3.2 filtern oder ersetzen Sie illegale Zeichen

Wenn Sie befürchten, dass die anhängigen Zeichenfolgen Steuerzeichen (z. B. nicht gedruckte Zeichen) enthalten, die dazu führen, dass das Match fehlschlägt, können Sie sie zuerst mit Regelmäßigkeit filtern:

 <?php
// Entfernen Sie nicht gedruckte Zeichen,Nur gemeinsame und Chinesen sind erhalten
$clean_text = preg_replace('/[^\P{C}\n]+/u', '', $text);

4. umfassendes Beispiel

Das folgende Beispiel zeigt, wie Sie Sonderzeichen im Muster entkommen, bevor Sie MB_Eregi_Replace aufrufen und illegale Zeichen in der zu ersetzenden Zeichenfolge vorbereiten:

 <?php
// Saiten und Muster, die ersetzt werden müssen
$pattern_raw = "foo.bar?"; // Enthält Sonderzeichen . Und ?
$replacement = "PHP";
$text = "Hello foo.bar? world! \x01\x02"; // Fügen Sie Kontrollzeichen ein

// 1. Sonderzeichen im Escape -Modus
$pattern = preg_quote($pattern_raw, '/');

// 2. Vorverarbeiteter Text,Steuerzeichen entfernen
$clean_text = preg_replace('/[^\P{C}\n]+/u', '', $text);

// 3. verwendenmb_eregi_replaceErsetzen(Fall ignorieren)
$result = mb_eregi_replace($pattern, $replacement, $clean_text);

echo $result;
?>

Ausgabe: