mb_eregi_replace () ist eine sehr nützliche Funktion, wenn es sich um Multibyte -Zeichenfolgen in PHP handelt. Es funktioniert ähnlich wie Eregi_Replace () , wird jedoch speziell für Multibyte-Zeichenfolgen wie utf-8-codierter chinesischer Text verwendet. In der tatsächlichen Verwendung können wir jedoch auf ein gemeinsames Problem stoßen: Wie können wir die zusätzlichen Räume entfernen, die vor und nach dem Ersatz bei Verwendung von mb_eregi_replace () erscheinen können?
Nehmen wir beispielsweise an, wir möchten mit einem HTML -Verknüpfung [/url] http://m66.net/page [/url] im Text ersetzen, während das Ersatzergebnis nicht von den vorderen und hinteren Räumen beeinflusst oder zusätzliche Räume mitgebracht wird. Zu diesem Zeitpunkt kann TRIM () nützlich sein.
Schauen wir uns zunächst ein grundlegendes Ersatzbeispiel an:
<Code> $ text = "Hier ist ein Link: [url] http://m66.net/page [/url], bitte klicken Sie."; $ muster = ' (.*?) ';
$ ersatz = '<a href = "\ 1"> link </a>';
$ result = mb_eregi_replace ($ muster, $ ersatz, $ text);
Echo $ Ergebnis;
</code>
Das Ausgangsergebnis ist:
Hier ist ein Link:<a href="http://m66.net/page">Link</a> ,Bitte klicken Sie。
Aus der Oberfläche scheint es in Ordnung zu sein, aber wenn es vor und nach dem Inhalt in der Mitte des [URL] -Tags Räume gibt, zum Beispiel:
[URL] http://m66.net/page [/URL]
Das HREF -Attribut in der HTML -Link nach dem Ersatz enthält zusätzliche Räume, wodurch die Verbindung nicht korrekt geöffnet oder Ausnahmen angezeigt werden kann.
Um dieses Problem zu lösen, müssen wir TRIM () in der Rückruffunktion verwenden. Leider unterstützt mb_eregi_replace () die Rückruffunktionen nicht direkt. Wir können jedoch mb_ereg_replace_callback () verwenden, um denselben Zweck zu erreichen.
Der geänderte Code lautet wie folgt:
<Code> $ text = "Hier ist ein Link: [url] http://m66.net/page [/url], bitte klicken Sie.";$ muster = ' (.*?) ';
$ result = mb_ereg_replace_callback (mb_ereg_replace_callback (
$ muster,
Funktion ($ Matches) {
$ url = trim ($ Matches [1]);
return '<a href = "'. $ url. '"> link </a>';
},
$ Text
);
Echo $ Ergebnis;
</code>
Die Ausgabe wird:
Hier ist ein Link:<a href="http://m66.net/page">Link</a> ,Bitte klicken Sie。
Dieses Mal gibt es keine zusätzlichen Räume im Link, und die Leistung wird stabiler und professioneller sein.
Während mb_eregi_replace () beim Umgang mit von Fall unempfindlichen Multi-Byte-Ersatzungen bequem ist, kann es keine benutzerdefinierte Logik wie preg_replace_callback () übergeben. Um das Raumproblem zu lösen, besteht die beste Praxis darin, mb_ereg_replace_callback () zu verwenden, die String -Verarbeitungsfunktionen wie TRIM () verwenden können, um eine flexiblere Verarbeitung der passenden Ergebnisse zu erzielen. Auf diese Weise können wir sicherstellen, dass die Ausgabeverbindungen oder andere Ersatzinhalte genauer, robuster sind und die allgemeine Benutzererfahrung verbessern.