Menu

trim() w PHP: usuwanie białych znaków ze stringa

trim($string) usuwa spacje, tabulatory i znaki nowej linii z obu końców stringa; ltrim() i rtrim() czyszczą jedną stronę. Dowiedz się, jak usuwać wybrane znaki, japońską spację pełnej szerokości i przycinać każdą wartość w tablicy.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

trim($string) zwraca string z usuniętymi białymi znakami z początku i końca: spacjami, tabulatorami, znakami nowej linii, powrotami karetki, bajtami NUL i tabulatorami pionowymi. ltrim() usuwa je tylko z początku, a rtrim() tylko z końca. Spacje w środku zostają.

Wynik var_dump() pokazuje długość każdego wyniku, dzięki czemu widać usunięte znaki. Przycinanie to pierwsza rzecz do zrobienia z większością wartości z formularza (wyjątkiem są hasła, zobacz koniec strony): użytkownik, który wpisze ada@example.com ze spacją na końcu, nadal powinien móc się zalogować.

Składnia

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() zwraca nowy string; nie zmienia przekazanej zmiennej.

Usuwanie wybranych znaków

Drugi argument zastępuje domyślną listę. Każdy znak z niej jest usuwany z końców, w dowolnej kolejności i dowolną liczbę razy. .. definiuje zakres, więc 'a..z' oznacza każdą małą literę.

Aby nadal usuwać też zwykłe białe znaki, dodaj je do listy: trim($s, " \n\r\t\v\0/").

Drugi argument to zbiór znaków, a nie string

trim() nie usuwa słowa ani sufiksu. Usuwa z obu końców dowolne z wymienionych znaków, dopóki nie trafi na znak spoza listy. Zaskakuje to osoby, które próbują usunąć rozszerzenie pliku:

Pierwsza linia usuwa też h na początku, bo h jest w zbiorze. Aby usunąć stały prefiks lub sufiks, użyj str_starts_with() albo str_ends_with() z substr(), albo str_replace(), jeśli ten tekst nie może pojawić się nigdzie indziej.

Usuwanie spacji pełnej szerokości (dane z Japonii)

Japońskie klawiatury często wstawiają spację ideograficzną   (U+3000), na przykład wokół imienia wpisanego w formularzu. Nie ma jej na domyślnej liście trim, a podanie jej w drugim argumencie to pułapka: trim() działa bajt po bajcie, spacja to 3 bajty E3 80 80, a E3 jest też pierwszym bajtem każdego znaku hiragany i katakany, więc imię zaczynające się od takiego znaku traci jego pierwszy bajt. Użyj wyrażenia regularnego z modyfikatorem u:

\A i \z kotwiczą początek i koniec stringa. Z modyfikatorem u wzorzec \s pasuje do każdej spacji Unicode: białych znaków ASCII, spacji pełnej szerokości i twardej spacji (U+00A0), którą często przynosi kopiowanie ze stron WWW. Bez u \s pasuje tylko do białych znaków ASCII i spacja pełnej szerokości zostaje. PHP 8.4 dodaje do tego mb_trim(), mb_ltrim() i mb_rtrim(); w PHP 8.3 i starszych sposobem jest wyrażenie regularne.

Przycinanie każdej wartości w tablicy

array_map('trim', $array) przycina każdą wartość i zachowuje klucze. Typowy przypadek to lista rozdzielona przecinkami z pola tekstowego, podzielona przez explode():

Przycięcie wartości z formularza przed walidacją

Najpierw przytnij, potem sprawdź pusty string. Pole zawierające same spacje zostanie wtedy odrzucone jako puste. Uruchom ten blok, wpisz w formularzu imię otoczone spacjami i naciśnij Send: ten sam skrypt uruchomi się ponownie z wypełnionym $_POST.

Nie przycinaj haseł: spacja na końcu hasła jest jego częścią.

Najczęściej zadawane pytania

Co usuwa trim() w PHP?

Domyślnie z obu końców stringa: spacje, tabulatory (\t), znaki nowej linii (\n), powroty karetki (\r), bajty NUL (\0) i tabulatory pionowe (\v). Nigdy nie rusza środka stringa.

Czym różnią się trim, ltrim i rtrim?

trim() czyści oba końce, ltrim() tylko początek, a rtrim() tylko koniec. Wszystkie trzy przyjmują tę samą opcjonalną listę znaków do usunięcia.

Dlaczego trim() nie usuwa japońskiej spacji pełnej szerokości?

Spacja pełnej szerokości (U+3000) nie jest na domyślnej liście trim i zajmuje w UTF-8 3 bajty. Użyj preg_replace('/\A\s+|\s+\z/u', '', $s): z modyfikatorem u wzorzec \s pasuje do każdej spacji Unicode, także U+3000. PHP 8.4 dodaje mb_trim(), które też ją usuwa.

Jak usunąć ostatni przecinek ze stringa w PHP?

rtrim($s, ',') usuwa każdy przecinek na końcu. Jeśli po nim może być spacja, dodaj też spację: rtrim($s, ', ').

Jak przyciąć każdą wartość w tablicy?

array_map('trim', $array) zwraca nową tablicę z przyciętą każdą wartością, z zachowaniem kluczy. Dla tablic zagnieżdżonych użyj array_walk_recursive() z referencją.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ