substr()
Die Funktion substr() in PHP extrahiert einen Teil eines Strings. Sie ist eines der meistgenutzten String-Werkzeuge in PHP.
Die Funktion substr() gibt einen Ausschnitt eines Strings zurück – die Zeichen zwischen einer Startposition und einer optionalen Länge. Sie gehört zu den am häufigsten verwendeten String-Werkzeugen in PHP: Präfixe abschneiden, die ersten N Zeichen eines Labels nehmen, ein Feld mit fester Breite auslesen oder eine Dateiendung ermitteln – all das läuft auf einen substr()-Aufruf hinaus. Diese Seite behandelt die Syntax, das Verhalten der Argumente $start und $length (einschließlich negativer Werte), häufige Fallstricke sowie den Fall, wann stattdessen mb_substr() verwendet werden sollte.
Syntax
substr(string $string, int $offset, ?int $length = null): string| Parameter | Beschreibung |
|---|---|
$string | Der Eingabe-String, aus dem extrahiert wird. |
$offset | Nullbasierte Startposition. Negative Werte zählen vom Ende des Strings. |
$length | Optional. Wie viele Zeichen zurückgegeben werden sollen. Weglassen (oder null übergeben) liest bis zum Ende des Strings. Ein negativer Wert bedeutet „halte so viele Zeichen vor dem Ende an." |
substr() gibt den extrahierten Teilstring zurück. Ab PHP 8.0 gibt sie immer einen String zurück (einen leeren String, wenn nichts übereinstimmt); vor PHP 8.0 gab sie bei einem Fehler false zurück, sodass dies in älterem Code noch vorkommen kann.
Ein einfaches Beispiel
$offset ist 0, die Extraktion beginnt also beim ersten Zeichen, und $length ist 5, sodass fünf Zeichen (Hello) zurückgegeben werden. Denke daran, dass der Offset nullbasiert ist: Position 0 ist H, Position 1 ist e usw.
Wie der Offset funktioniert
Ein positiver Offset zählt vom Anfang; ein negativer Offset zählt vom Ende (wobei -1 das letzte Zeichen ist):
<?php
$string = "Hello World!";
echo substr($string, 6); // World! — from offset 6 to the end
echo "\n";
echo substr($string, -6); // World! — last 6 characters
echo "\n";
echo substr($string, -1); // ! — just the last characterWenn $length weggelassen wird, wird alles ab dem Offset zurückgegeben – praktisch, um ein bekanntes Präfix zu entfernen.
Wie die Länge funktioniert
Ein positiver $length-Wert begrenzt die Anzahl der zurückgegebenen Zeichen. Ein negativer $length-Wert hält so viele Zeichen vor dem Ende des Strings an – ideal, um ein bekanntes Suffix abzuschneiden:
<?php
$string = "Hello World!";
echo substr($string, 0, -1); // Hello World — drop the trailing "!"
echo "\n";
echo substr($string, -6, 5); // World — start 6 from the end, take 5
echo "\n";
echo substr($string, 4, 0); // (empty) — length 0 returns ""Wenn die angeforderte Länge über das Ende des Strings hinausgeht, gibt substr() einfach zurück, was vorhanden ist – es wird kein Fehler für „zu lang" ausgegeben.
Praktisches Beispiel: eine Dateiendung
Die Kombination von substr() mit strrpos() (das die letzte Position eines Zeichens findet) ist der klassische Weg, eine Dateiendung auszulesen:
<?php
$filename = "report.final.pdf";
$ext = substr($filename, strrpos($filename, ".") + 1);
echo $ext; // pdfHäufige Fallstricke
- Offset außerhalb des Bereichs. Wenn
$offsetgrößer als die Stringlänge ist, erhält man einen leeren String (in PHP 8+). Es findet kein Wrap-around statt. - Zählt Bytes, nicht Zeichen.
substr()arbeitet auf Bytes. Bei UTF-8-Text mit Akzentzeichen oder Emojis kann das Aufteilen mitten in einem Zeichen unleserliche Ausgaben erzeugen. Verwendemb_substr()für multibyte-sichere Extraktion. - Off-by-one bei der Länge.
$lengthist eine Anzahl, kein Endindex.substr($s, 2, 3)gibt 3 Zeichen ab Index 2 zurück – nicht die Zeichen zwischen Index 2 und Index 3.
Verwandte Funktionen
strlen()— Länge eines Strings ermitteln, häufig zur Berechnung einer$lengthverwendet.strpos()— Startposition eines Teilstrings finden, um sie ansubstr()zu übergeben.explode()— String anhand eines Trennzeichens in ein array aufteilen.trim()— Leerzeichen (oder andere Zeichen) von beiden Enden entfernen.