str_replace($search, $replace, $subject) liefert eine Kopie von $subject, in der jedes Vorkommen von $search durch $replace ersetzt ist. str_replace('world', 'PHP', 'Hello world') liefert "Hello PHP".
Die Funktion liefert den neuen String; sie ändert die übergebene Variable nicht. Weise das Ergebnis zu, auch an dieselbe Variable: $text = str_replace(...).
Syntax
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
Jedes der ersten drei Argumente kann ein String oder ein Array sein. Ist $subject ein Array, läuft die Ersetzung über jedes Element, und du bekommst ein Array mit denselben Schlüsseln zurück: str_replace('.txt', '.md', ['a.txt', 'b.txt']) liefert ['a.md', 'b.md']. Die Suche unterscheidet Groß- und Kleinschreibung und trifft reinen Text, keine Muster. Für Muster verwendest du preg_replace().
Mehrere Strings auf einmal ersetzen
Übergib Arrays für $search und $replace. Der erste Suchwert wird durch den ersten Ersatz ersetzt, der zweite durch den zweiten und so weiter. Ist $replace ein einzelner String, wird jeder Suchwert dadurch ersetzt, der kurze Weg, eine Reihe von Zeichen zu entfernen.
Die Reihenfolge-Falle und strtr()
Mit Arrays führt str_replace() eine Ersetzung nach der anderen über den ganzen String aus. Eine spätere Suche kann Text treffen, den eine frühere Ersetzung gerade eingefügt hat. strtr() mit einem Array ersetzt alles in einem einzigen Durchgang, probiert die längsten Schlüssel zuerst und rührt bereits ersetzten Text nie wieder an.
Verwende strtr() für Vertauschungen und für Template-Platzhalter, die in den Werten vorkommen könnten.
Die Ersetzungen zählen
Das vierte Argument wird mit der Anzahl der vorgenommenen Ersetzungen gefüllt. Übergib eine Variable; PHP schreibt hinein.
Ersetzen ohne Groß- und Kleinschreibung mit str_ireplace
str_ireplace() nimmt dieselben Argumente und ignoriert beim Vergleich Groß- und Kleinschreibung. Der Ersatz wird genau so eingefügt, wie du ihn geschrieben hast.
str_ireplace() behandelt nur ASCII-Buchstaben ohne Groß- und Kleinschreibung. Um Umlaute, Akzente oder kyrillische Buchstaben so zu ersetzen, verwendest du preg_replace() mit den Modifikatoren i und u.
Nur das erste Vorkommen ersetzen
str_replace() ersetzt immer alles. Um nur den ersten Treffer zu ersetzen, suchst du ihn mit strpos() und schneidest ihn mit substr_replace() heraus:
Für das letzte Vorkommen verwendest du strrpos() statt strpos().
Leerzeichen, Zeilenumbrüche und andere Zeichen entfernen
Mit einem leeren String zu ersetzen, entfernt den Text. Eine häufige Bereinigung entfernt Zeilenumbrüche oder alle Leerzeichen, und japanische Eingaben enthalten oft vollbreite Leerzeichen ( , U+3000), die eine normale Suche nach " " nicht trifft.
Setze "\r\n" im Array vor "\n" und "\r", damit ein Windows-Zeilenumbruch zu einem Leerzeichen wird und nicht zu zweien.
Häufig gestellte Fragen
Wie ersetze ich in PHP Text in einem String?
Mit str_replace($search, $replace, $subject): str_replace('cat', 'dog', 'cat and cat') liefert "dog and dog". Es ersetzt jedes Vorkommen und liefert einen neuen String; das Original bleibt unverändert.
Unterscheidet str_replace Groß- und Kleinschreibung?
Ja. str_replace('php', 'PHP', 'Php') ändert nichts. Verwende str_ireplace(), das dieselben Argumente nimmt und Groß- und Kleinschreibung ignoriert.
Wie ersetze ich in PHP nur das erste Vorkommen?
str_replace() hat kein Argument für ein Limit. Such die Position mit strpos() und verwende substr_replace($s, $replace, $pos, strlen($search)), oder verwende preg_replace('/' . preg_quote($search, '/') . '/', $replace, $s, 1).
Wie ersetze ich in PHP mehrere Strings auf einmal?
Übergib Arrays: str_replace(['a', 'b'], ['1', '2'], $s). Die Ersetzungen laufen der Reihe nach, also kann eine spätere Suche Text treffen, den eine frühere eingefügt hat. strtr($s, ['a' => '1', 'b' => '2']) ersetzt alles in einem Durchgang und ersetzt nie erneut.
Funktioniert str_replace mit japanischem Text?
Ja. str_replace() vergleicht Bytes, und ein vollständiges UTF-8-Zeichen passt nie in die Mitte eines anderen Zeichens, also ist str_replace('東京', '大阪', $s) sicher. Eine mb-Version ist nicht nötig.