Menu

Nowa linia w PHP: \n, PHP_EOL i nl2br

Aby wypisać nową linię w PHP, napisz "\n" w podwójnych cudzysłowach albo użyj PHP_EOL. Na stronie WWW znak nowej linii nie jest widoczny, więc użyj <br> albo nl2br(). Poznaj różnicę, powód, dla którego '\n' w pojedynczych cudzysłowach nie działa, oraz sposoby dzielenia tekstu na linie i usuwania znaków końca linii.

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

Aby wypisać nową linię, napisz \n w stringu w podwójnych cudzysłowach: echo "Line 1\nLine 2";. Stała PHP_EOL robi to samo i czytelniej wygląda na końcu linii: echo 'Done' . PHP_EOL;. Na stronie WWW znak nowej linii nie pojawia się jako złamanie linii; tam potrzebujesz <br> albo nl2br().

Pojedyncze a podwójne cudzysłowy

Sekwencje ucieczki, takie jak \n i \t, działają tylko w podwójnych cudzysłowach. W pojedynczych '\n' to dwa znaki: ukośnik wsteczny i litera n. To zwykły powód, dla którego „\n nie działa”.

Strona o stringach wymienia wszystkie sekwencje ucieczki rozumiane w podwójnych cudzysłowach.

PHP_EOL vs "\n"

PHP_EOL to znak końca linii systemu, na którym działa PHP: "\n" w Linuksie i macOS, "\r\n" w Windows. Używaj go dla wyjścia w terminalu i plików, które będziesz czytać na tej samej maszynie. Gdy format definiuje własny koniec linii, użyj właśnie jego: nagłówki HTTP i e-mail wymagają "\r\n", a większość narzędzi wszędzie dobrze czyta "\n".

"\r" to powrót karetki, a "\n" to wysunięcie wiersza. Pliki z Windows kończą linie oboma, "\r\n", dlatego tekst od użytkownika Windows albo z <textarea> często zawiera nieoczekiwane znaki \r.

Nowa linia w HTML: br i nl2br

Przeglądarka zamienia znaki nowej linii w pojedynczą spację, więc echo "a\nb" pokazuje na stronie a b. Albo wypisz <br> sam, albo zostaw znaki nowej linii w tekście i zamień je przez nl2br(), które wstawia <br /> przed każdym z nich. Uruchom to i porównaj zakładki Output i Page:

W zakładce Output wszystkie trzy wyglądają podobnie. W zakładce Page pierwszy zlewa się w jedną linię, nl2br() go łamie, a <pre> zachowuje znaki nowej linii tak, jak zostały zapisane.

Wyświetlanie danych z textarea razem z podziałem na linie

Tekst z <textarea> zachowuje linie wpisane przez użytkownika, ale przed wypisaniem do HTML trzeba go escapować. Kolejność ma znaczenie: najpierw htmlspecialchars(), potem nl2br(), inaczej escapowane zostałyby same znaczniki <br />. Uruchom, wpisz kilka linii w pole i naciśnij Preview: ten sam skrypt uruchomi się ponownie z wypełnionym $_POST.

Złamanie linii w textarea może przyjść jako "\r\n" albo "\n"; oba zawierają "\n", więc liczenie tego znaku działa w obu przypadkach. Strona htmlspecialchars() wyjaśnia, dlaczego escapowanie nie jest tu opcjonalne.

Podział stringa po znaku nowej linii

explode("\n", $text) działa dla tekstu, który sam utworzyłeś. W tekście od użytkowników lub z plików końce linii mogą być "\r\n", "\n" albo "\r"; preg_split('/\R/', $text) obsługuje je wszystkie, bo \R pasuje do każdego złamania linii.

Usuwanie znaków końca linii ze stringa

Aby zamienić tekst wielolinijkowy w jedną linię, zamień każdy rodzaj końca linii. Zamieniaj "\r\n" przed pojedynczymi znakami, inaczej każde złamanie linii z Windows stałoby się dwiema spacjami:

trim() i rtrim() usuwają znaki nowej linii na końcach stringa, ale nigdy w środku, więc są właściwym narzędziem dla linii odczytanej z pliku, a niewłaściwym do łączenia linii.

Najczęściej zadawane pytania

Jak wypisać nową linię przez echo w PHP?

Umieść \n w stringu w podwójnych cudzysłowach: echo "Line 1\nLine 2";. Albo dołącz stałą: echo 'Line 1' . PHP_EOL;. W przeglądarce znak nowej linii nie jest widoczny; tam użyj <br> albo nl2br().

Dlaczego \n nie działa w PHP?

Albo string jest w pojedynczych cudzysłowach, gdzie '\n' to ukośnik wsteczny i litera n, albo wynik jest wyświetlany jako HTML, gdzie przeglądarka traktuje nową linię jak spację. Używaj "\n" w podwójnych cudzysłowach dla wyjścia tekstowego, a nl2br() albo <br> dla stron WWW.

Czym jest PHP_EOL?

Stałą zawierającą znak końca linii systemu operacyjnego, na którym działa PHP: "\n" w Linuksie i macOS, "\r\n" w Windows. Używaj jej dla wyjścia w terminalu i plików lokalnych; w HTTP, e-mailach i plikach CSV znak końca linii zwykle wyznacza format, niezależnie od systemu.

Co robi nl2br w PHP?

nl2br($text) wstawia <br /> przed każdym znakiem końca linii w stringu, więc tekst wpisany w <textarea> zachowuje swoje linie po wyświetleniu w HTML. Najpierw escapuj: nl2br(htmlspecialchars($text)).

Jak usunąć znaki końca linii ze stringa w PHP?

Zamień wszystkie trzy rodzaje końca linii: str_replace(["\r\n", "\r", "\n"], ' ', $text) albo wyrażeniem regularnym preg_replace('/\R/', ' ', $text). Aby usunąć tylko końcowy znak nowej linii, użyj rtrim($text, "\r\n").

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ