Bei der Verwendung von PHP für die String -Verarbeitung war die Funktion mb_eregi_replace früher eines meiner gemeinsamen Werkzeuge. Diese Funktion kann einen regelmäßigen Fall-unempfindlichen Austausch von Multi-Byte-Zeichenfolgen implementieren, was sehr geeignet ist, Text mit Multi-Byte-Zeichen wie Chinesen zu verarbeiten. In der Umgebung von PHP 7.3+ stellte ich jedoch plötzlich fest, dass die Verwendung von mb_eregi_replace im Code Warnungen oder sogar Fehler verursachen würde. Ich dachte, diese Funktion sei veraltet gewesen, aber später studierte ich sie ausführlich und stellte fest, dass die Wahrheit nicht der Fall war.
Einfach ausgedrückt, MB_Eregi_Replace ist eine Funktion, die durch die Mbstring- Erweiterung bereitgestellt wird, um den Suchersatz von regulären Ausdrücken in Multibyte-Zeichenfolgen durchzuführen, und ist von Fall unempfindlich.
<?php
$original = "Hello World! hello world!";
$result = mb_eregi_replace("hello", "hi", $original);
echo $result; // Ausgabe:hi World! hi world!
?>
Die Funktion dieser Funktion ist bei der Verarbeitung von Multi-Byte-String sehr nützlich, insbesondere wenn eine Fallübereinstimmung erforderlich ist.
In PHP 7.3 und oben fordert MB_Eregi_Replace eine Warnung auf, die dem folgenden ähnlich ist:
Deprecated: mb_eregi_replace(): This function is deprecated
Dies hat dazu geführt, dass viele Entwickler (einschließlich mir) fälschlicherweise glauben, dass PHP -Beamter diese Funktion veraltet hat. Wir haben also versucht, andere Alternativen zu verwenden, z .
Ab Php 7.3 hat sich der zugrunde liegende reguläre Motor, von dem MB_eregi_Replace abhängt, geändert. Der PHP -Beamte migrierte den regulären Motor von Mbregex auf PCRE (Perl kompatible reguläre Ausdrücke), und die Funktion MB_Eregi_Replace selbst wird basierend auf Mbregex implementiert, was dazu führt, dass der interne Mechanismus als veraltet markiert wird, die Funktion jedoch immer noch existiert.
Das heißt:
Die Funktion wurde nicht vollständig entfernt und ist nur offiziell als "in Zukunft aufgegeben" markiert, was die Entwickler daran erinnert, einen schrittweisen Übergang vorzunehmen.
Dies erklärt auch, warum es in einigen PHP -Versionen noch verfügbar ist, aber es gibt eine Warnung.
Der Wartungsstatus der zugrunde liegenden Mbregex -regulären Bibliothek verschlechtert sich und wird nicht mehr empfohlen.
Da MB_Eregi_Replace das Risiko einer Abgabe hat, wird empfohlen, die folgende Alternative zu verwenden:
<?php
$original = "Hello Welt! hello Welt!";
$pattern = "/hello/u"; // u Modifikatoren unterstützen Multibyten,i Modifikatoren sind unempfindlich
$result = preg_replace($pattern . "i", "hi", $original);
echo $result; // Ausgabe:hi Welt! hi Welt!
?>
Der Punkt hier ist:
Der U- Modifikator stellt sicher, dass regelmäßige Ausdrücke in UTF-8-Multibyten verarbeitet werden.
Die I -Modifikator -Implementierung ignoriert den Fall;
preg_replace ist eine moderne reguläre Ersatzfunktion, die offiziell von PHP empfohlen wird.
PHP 8.0 hat MB_STR_IREPLACE hinzugefügt, eine Multi-Byte-Fall-unempfindliche String-Ersatzfunktion. Die Syntax ist einfach:
<?php
$original = "Hello Welt! hello Welt!";
$result = mb_str_ireplace("hello", "hi", $original);
echo $result; // Ausgabe:hi Welt! hi Welt!
?>
Dies ist die einfachste Alternative, wenn die Projekt -Laufzeit -Umgebung PHP 8.0 und höher unterstützt.
MB_Eregi_Replace ist in der Tat als veraltet in PHP 7.3+ markiert, aber nicht vollständig entfernt.
Diese Aufgabe stammt aus dem zugrunde liegenden regelmäßigen Motorschalter, anstatt direkt Funktionen zu entfernen.
Es wird empfohlen, stattdessen PREG_REPLACE mit U- und I -Modifikatoren zu verwenden.
Wenn Sie auf PHP 8.0 oder höher upgraden können, können Sie mit MB_STR_IREPLACE es ersetzen.
In Zukunft können PHP -Versionen mb_eregi_replace vollständig entfernen, und je früher der Code ist, desto besser.
Ich hoffe, dieser Artikel kann Ihnen helfen, die aktuelle Situation von mb_eregi_replace zu klären, veraltete Funktionen blind zu machen und die Modernität und Stabilität des Codes zu verwalten.