66 Stimmen

PHP: Beliebige Zeichen am Anfang und Ende eines Strings entfernen

Tutorial von Stefan Trost | Letztes Update am 17.11.2022 | Erstellt am 19.08.2011

Manchmal möchten wir bestimmte Zeichen vom Beginn und/oder vom Ende eines Strings entfernen. Beispielsweise können dies Leerzeichen, anderer Whitespace oder auch Bindestriche oder beliebige andere Zeichen sein.

Schauen wir uns als ein erstes Beispiel zunächst die folgenden drei Strings an:

$a = "  Leerzeichen vorne und hinten sollen weg.  ";
$b = "- bindestriche-vorne-und-hinten-sollen-weg -";
$c = " - Bindestriche und Leerzeichen sollen weg. - ";

Aus dem ersten String möchten wir die Leerzeichen vom Beginn und vom Ende entfernen, aus dem zweiten die Bindestriche vorne und hinten, aus dem dritten String beides.

Folgender PHP-Code macht genau das:

$a = trim($a);       // "Leerzeichen vorne und hinten sollen weg."
$b = trim($b, '-');  // " bindestriche-vorne-und-hinten-sollen-weg "
$c = trim($c, '- '); // "Bindestriche und Leerzeichen sollen weg."

Wir verwenden die Funktion trim(), der wir als ersten Parameter unseren String übergeben, den wir beschneiden möchten. Benutzen wir trim() ohne einen weiteren Parameter, wird hinten und vorne jeglicher Whitespace entfernt. In PHP zählen dazu normale Leerzeichen, horizontale und vertikale Tabulatorenzeichen (\t und \v), Zeilenumbrüche (\r und \n) sowie das Null-Byte (\0). Unser erstes Beispiel mit dem String $a demonstriert dies.

Wenn wir andere als die Standard-Whitespace-Zeichen entfernen möchten, können wir diese der Funktion trim() als zweiten Parameter übergeben. Dies machen wir in dem zweiten und in dem dritten Beispiel mit den Strings $b und $c. Im zweiten Beispiel übergeben wir nur einen Bindestrich als zweiten Parameter. Damit wird gar kein Whitespace entfernt und die Leerzeichen hinten und vorne bleiben genauso wie die Bindestriche innerhalb des Strings stehen. Im dritten Beispiel nehmen wir das Leerzeichen hinzu und entfernen sowohl Leerzeichen als auch Bindestriche vom Beginn und vom Ende aus dem String.

Bereiche von Zeichen entfernen

Die Angabe einzelner Zeichen, wie wir es in unserem dritten Beispiel getan haben, hat einen Nachteil: Wenn wir sehr viele Zeichen entfernen möchten, wird es umständlich. Zum Glück bietet uns PHP hier eine einfache Möglichkeit, wie wir ganze Bereiche von Zeichen spezifizieren und mit der Trim-Funktion entfernen können:

$s = 'abcdefghij';
$s = trim($s, 'a..f');  // "ghij"

Hier möchten wir alle Zeichen von a bis f aus dem String "abcdefghij" entfernen. Mit der Angabe a..f bleibt uns erspart, alle Buchstaben einzeln aufzuführen. Die Angabe "a..f" führt entsprechend zum selben Ergebnis, als wenn wir "abcdef" schreiben würden. In beiden Fällen erhalten wir das Resultat "ghij".

Die Angabe muss übrigens nicht zwingend über die Zeichen als solche erfolgen. Wir können genauso auch mit Codepoints arbeiten. Mit Codepoints ausgedrückt wäre der Parameter für die Buchstaben a bis f aus unserem Beispiel "\x61..\x66".

Default Whitespace um weitere Zeichen ergänzen

Wie wir in unseren ersten Beispielen gesehen haben, verlieren wir unseren Standard-Whitespace sobald wir den zweiten Parameter verwenden. In dem Moment, wo wir als zweiten Parameter den Bindestrich übergeben haben, wurde der Whitespace nicht mehr entfernt. Was können wir also tun, wenn wir die Standardfunktion von trim() nur um einzelne weitere Zeichen ergänzen möchten?

Die Antwort lautet: Wir müssen alle Standard-Whitespace-Zeichen zusätzlich als zweiten Parameter übergeben. Dies geht mit " \n\r\t\v\0", wie das nächste Beispiel zeigt:

$a = trim($s);
$b = trim($s, " \n\r\t\v\0");

Hier führen beide Aufrufe, einmal mit und einmal ohne den zweiten Parameter, zum gleichen Resultat.

Möchten wir weitere Zeichen ergänzen, können wir diese einfach zusätzlich hinzufügen:

$c = trim($s, " \n\r\t\v\0-");
$d = trim($s, " \n\r\t\v\00..9");

In der ersten Zeile haben wir nur den Bindestrich hinzugefügt, in der zweiten Zeile die Zahlen 0 bis 9, definiert über einen Range, wie wir es im Abschnitt zuvor kennengelernt haben.

Zeichen nur hinten oder nur vorne entfernen

Ganz gleich ob wir die Standardzeichen entfernen möchten oder eigene Zeichen definieren - mit der trim()-Funktion werden die Zeichen immer sowohl von vorne als auch von hinten entfernt. Aber auch für den Fall, dass wir Zeichen nur von vorne oder nur von hinten entfernen möchten, bietet uns PHP eine Lösung an: ltrim() und rtrim(). Die nächsten 3 Zeilen sollen die Funktionsweise im Vergleich zu trim() verdeutlichen:

$s = " abc ";
$a = trim($s);   // "abc"
$b = ltrim($s);  // "abc "
$c = rtrim($s);  // " abc"

Wir haben einen String $s, der mit einem Leerzeichen beginnt und mit einem Leerzeichen endet. Mit der normalen trim()-Funktion werden beide dieser Leerzeichen entfernt. Mit ltrim() entfernen wir den Whitespace dagegen nur von vorne (l = links), mit rtrim() löschen wir das Leerzeichen nur hinten (r = rechts). Ansonsten können diese beiden Funktionen genauso verwendet werden wie das Original.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.