trim($string) liefert den String ohne Leerraum am Anfang und am Ende: Leerzeichen, Tabs, Zeilenumbrüche, Wagenrückläufe, NUL-Bytes und vertikale Tabs. ltrim() entfernt ihn nur am Anfang und rtrim() nur am Ende. Leerzeichen in der Mitte bleiben erhalten.
Die Ausgabe von var_dump() zeigt die Länge jedes Ergebnisses und macht damit die entfernten Zeichen sichtbar. Trimmen ist das Erste, was du mit den meisten Werten aus einem Formular tust (Passwörter sind die Ausnahme, siehe Ende der Seite): Wer ada@example.com mit einem Leerzeichen am Ende tippt, soll sich trotzdem anmelden können.
Syntax
trim(string $string, string $characters = " \n\r\t\v\0"): string
ltrim(string $string, string $characters = " \n\r\t\v\0"): string
rtrim(string $string, string $characters = " \n\r\t\v\0"): string
trim() liefert einen neuen String; es ändert die übergebene Variable nicht.
Bestimmte Zeichen trimmen
Das zweite Argument ersetzt die Standardliste. Jedes Zeichen darin wird an den Enden entfernt, in beliebiger Reihenfolge und beliebig oft. .. definiert einen Bereich, also bedeutet 'a..z' jeden Kleinbuchstaben.
Um weiterhin auch normalen Leerraum zu entfernen, nimmst du ihn in die Liste auf: trim($s, " \n\r\t\v\0/").
Das zweite Argument ist eine Menge von Zeichen, kein String
trim() entfernt kein Wort und keine Endung. Es entfernt beliebige der aufgeführten Zeichen an beiden Enden, bis es auf eines trifft, das nicht in der Liste steht. Das überrascht alle, die eine Dateiendung abschneiden wollen:
Die erste Zeile entfernt auch das h am Anfang, weil h in der Menge steht. Um ein festes Präfix oder Suffix zu entfernen, verwendest du str_starts_with() oder str_ends_with() mit substr() oder str_replace(), wenn der Text nirgendwo sonst vorkommen kann.
Das vollbreite Leerzeichen trimmen (japanische Eingabe)
Japanische Tastaturen erzeugen oft das ideografische Leerzeichen (U+3000), zum Beispiel um einen Namen, der in ein Formular getippt wurde. Es steht nicht in der Standardliste von trim, und es im zweiten Argument aufzuführen ist eine Falle: trim() arbeitet Byte für Byte, das Leerzeichen besteht aus den 3 Bytes E3 80 80, und E3 ist auch das erste Byte jedes Hiragana- und Katakana-Zeichens, also verliert ein Name, der mit einem solchen Zeichen beginnt, dessen erstes Byte. Verwende einen regulären Ausdruck mit dem Modifikator u:
\A und \z verankern am Anfang und Ende des Strings. Mit dem Modifikator u trifft \s jedes Unicode-Leerzeichen: den ASCII-Leerraum, das vollbreite Leerzeichen und das geschützte Leerzeichen (U+00A0), das Kopieren und Einfügen von Webseiten oft mitbringt. Ohne u trifft \s nur ASCII-Leerraum, und das vollbreite Leerzeichen bleibt stehen. PHP 8.4 bringt dafür mb_trim(), mb_ltrim() und mb_rtrim(); unter PHP 8.3 und älter ist der reguläre Ausdruck der Weg.
Jeden Wert in einem Array trimmen
array_map('trim', $array) trimmt jeden Wert und behält die Schlüssel. Ein typischer Fall ist eine kommagetrennte Liste aus einem Textfeld, aufgeteilt mit explode():
Einen Formularwert vor der Validierung trimmen
Erst trimmen, dann auf einen leeren String prüfen. Ein Feld, das nur Leerzeichen enthält, wird dann als leer abgelehnt. Führe diesen Block aus, tippe einen Namen mit Leerzeichen drumherum ins Formular und klicke auf Send: Dasselbe Skript läuft erneut, mit gefülltem $_POST.
Trimme keine Passwörter: Ein Leerzeichen am Ende eines Passworts gehört dazu.
Häufig gestellte Fragen
Was entfernt trim() in PHP?
Standardmäßig an beiden Enden des Strings: Leerzeichen, Tabs (\t), Zeilenumbrüche (\n), Wagenrückläufe (\r), NUL-Bytes (\0) und vertikale Tabs (\v). Die Mitte des Strings rührt es nie an.
Was ist der Unterschied zwischen trim, ltrim und rtrim?
trim() bereinigt beide Enden, ltrim() nur den Anfang und rtrim() nur das Ende. Alle drei nehmen dieselbe optionale Liste der zu entfernenden Zeichen.
Warum entfernt trim() das vollbreite japanische Leerzeichen nicht?
Das vollbreite Leerzeichen (U+3000) steht nicht in der Standardliste von trim und ist in UTF-8 3 Bytes lang. Verwende preg_replace('/\A\s+|\s+\z/u', '', $s): Mit dem Modifikator u trifft \s jedes Unicode-Leerzeichen, U+3000 eingeschlossen. PHP 8.4 bringt mb_trim(), das es ebenfalls entfernt.
Wie entferne ich in PHP das letzte Komma aus einem String?
rtrim($s, ',') entfernt jedes Komma am Ende. Wenn danach ein Leerzeichen folgen kann, nimm es mit auf: rtrim($s, ', ').
Wie trimme ich jeden Wert in einem Array?
array_map('trim', $array) liefert ein neues Array, in dem jeder Wert getrimmt ist, und behält die Schlüssel. Für verschachtelte Arrays verwendest du array_walk_recursive() mit einer Referenz.