substr_replace()
Die Funktion substr_replace() in PHP ersetzt einen Teil eines Strings durch einen anderen String, basierend auf einer numerischen Position.
Einführung
Die Funktion substr_replace() ersetzt einen Teil eines Strings durch einen anderen String, basierend auf einer numerischen Position anstelle eines Suchmusters. Sie geben an, wo der Ersatz beginnt und wie viele Zeichen überschrieben werden sollen, und die Funktion fügt den Ersatzstring ein. Das macht sie ideal für Bearbeitungen an festen Positionen — das Maskieren der Ziffern einer Kreditkarte, das Austauschen eines Datumsabschnitts oder das Einfügen von Text an einem bekannten Offset.
Dies unterscheidet sich von str_replace(), die durch das Finden und Ersetzen einer Zeichenkette arbeitet. Verwenden Sie substr_replace(), wenn Sie die Position kennen; verwenden Sie str_replace(), wenn Sie den Wert kennen.
Syntax
substr_replace(
array|string $string,
array|string $replace,
array|int $offset,
array|int|null $length = null
): string|array| Parameter | Beschreibung |
|---|---|
$string | Der Eingabestring (oder ein Array von Strings — siehe Arbeiten mit Arrays). |
$replace | Der Ersatzstring, der an der Stelle $offset eingefügt wird. |
$offset | Die Position, an der der Ersatz beginnt. Ein negativer Wert zählt vom Ende des Strings. |
$length | Wie viele Zeichen überschrieben werden. Weglassen (oder null übergeben), um bis zum Ende des Strings zu ersetzen. Ein negativer Wert stoppt so viele Zeichen vor dem Ende. 0 fügt ein, ohne etwas zu löschen. |
Die Funktion gibt den resultierenden String zurück. Sie verändert $string nicht direkt — der Rückgabewert muss gespeichert werden.
Grundlegendes Beispiel
Ab Index 7 (w) werden fünf Zeichen entfernt und "universe" an ihrer Stelle eingefügt.
Einfügen ohne Löschen
Übergeben Sie 0 als Länge, und nichts wird entfernt — der Ersatzstring wird einfach vor dem Offset eingefügt.
<?php
echo substr_replace("Hello", "ABC", 2, 0); // HeABClloErsetzen ab einem negativen Offset
Ein negativer $offset zählt vom Ende des Strings zurück, was praktisch ist, wenn die Länge nicht im Voraus bekannt ist.
<?php
echo substr_replace("Hello", "X", -1); // HellX (replace the last character)
echo "\n";
echo substr_replace("12345", "X", 1, -1); // 1X5 (replace from index 1 to 1-before-the-end)Ein praktisches Beispiel: Ziffern maskieren
Das Überschreiben eines bekannten Abschnitts mit der gleichen Anzahl von *-Zeichen ist ein häufiger Anwendungsfall — zum Beispiel das Verbergen eines Teils einer Kartennummer.
<?php
$card = "4111111111111111";
echo substr_replace($card, "********", 4, 8); // 4111********1111Arbeiten mit Arrays
Wenn Sie ein Array von Strings übergeben, wendet substr_replace() den Ersatz auf jedes Element an und gibt ein neues Array zurück. Sie können auch Arrays für $replace, $offset und $length übergeben, um unterschiedliche Werte pro Element zu verwenden.
<?php
$names = ["Alice", "Bob", "Carol"];
$result = substr_replace($names, "***", 1, 2);
print_r($result);
// Array
// (
// [0] => A***ce
// [1] => B***
// [2] => C***ol
// )Häufige Fallstricke
- Die Funktion gibt einen neuen String zurück.
substr_replace($s, ...)allein hat keine sichtbare Wirkung — das Ergebnis muss zugewiesen oder ausgegeben werden. - Offsets sind Byte-Positionen, keine Zeichenpositionen. Für Multibyte-(UTF-8-)Text gibt es kein
mb_substr_replace; Offsets müssen sorgfältig berechnet werden, oder der String muss mitmb_substr()neu aufgebaut werden. - Ein Offset nach dem Ende des Strings hängt den Ersatzstring an, anstatt ihn zu überschreiben.
Verwandte Funktionen
str_replace()— Ersetzen durch Wertabgleich statt Position.substr()— einen Teil eines Strings extrahieren.strpos()— die Position ermitteln, die ansubstr_replace()übergeben wird.str_pad()— einen String auf eine bestimmte Länge auffüllen.
Fazit
substr_replace() ist das positionsbasierte Gegenstück zu str_replace(). Sobald man versteht, dass Offset und Länge einen Abschnitt beschreiben — und dass eine Länge von 0 einfügt, während ein negativer Offset vom Ende zählt — wird sie zu einem präzisen Werkzeug zum Maskieren, Einsetzen und Bearbeiten von Strings an bekannten Positionen.