새 줄을 출력하려면 큰따옴표 문자열 안에 \n을 쓰세요: echo "Line 1\nLine 2";. 상수 PHP_EOL도 같은 일을 하며 줄 끝에서 더 명확하게 읽힙니다: echo 'Done' . PHP_EOL;. 웹 페이지에서는 줄바꿈이 줄 나눔으로 보이지 않으므로 <br>이나 nl2br()가 필요합니다.
작은따옴표와 큰따옴표
\n, \t 같은 이스케이프 시퀀스는 큰따옴표 안에서만 동작합니다. 작은따옴표 안의 '\n'은 백슬래시와 문자 n, 두 글자입니다. "\n이 동작하지 않는" 흔한 이유가 이것입니다.
큰따옴표가 이해하는 모든 이스케이프 시퀀스는 문자열 페이지에 있습니다.
PHP_EOL과 "\n"
PHP_EOL은 PHP가 실행되는 시스템의 줄 끝 문자입니다. Linux와 macOS에서는 "\n", Windows에서는 "\r\n"입니다. 터미널 출력과 같은 컴퓨터에서 읽을 파일에 쓰세요. 형식이 자체 줄 끝을 정한다면 그것을 쓰세요. HTTP 헤더와 이메일에는 "\r\n"이 필요하고, 대부분의 도구는 어디서나 "\n"을 잘 읽습니다.
"\r"은 캐리지 리턴, "\n"은 라인 피드입니다. Windows 파일은 줄 끝에 둘 다("\r\n") 쓰므로, Windows 사용자나 <textarea>에서 온 텍스트에는 예상하지 못한 \r 문자가 들어 있는 경우가 많습니다.
HTML에서 줄바꿈: br과 nl2br
브라우저는 줄바꿈을 공백 하나로 합치므로 echo "a\nb"는 페이지에 a b로 보입니다. <br>을 직접 출력하거나, 텍스트에 줄바꿈을 두고 각 줄바꿈 앞에 <br />을 넣는 nl2br()로 변환하세요. 실행하고 Output 탭과 Page 탭을 비교해 보세요.
Output 탭에서는 셋이 비슷해 보입니다. Page 탭에서는 첫 번째가 한 줄로 붙어 나오고, nl2br()는 줄을 나누며, <pre>는 줄바꿈을 쓴 그대로 유지합니다.
textarea 입력을 줄바꿈과 함께 보여 주기
<textarea>의 텍스트는 사용자가 입력한 줄을 유지하지만, HTML에 출력하기 전에 이스케이프해야 합니다. 순서가 중요합니다. 먼저 htmlspecialchars(), 그다음 nl2br()입니다. 그렇지 않으면 <br /> 태그 자체가 이스케이프됩니다. 실행하고 상자에 몇 줄을 입력한 뒤 Preview를 누르세요. $_POST가 채워진 채로 같은 스크립트가 다시 실행됩니다.
textarea의 줄바꿈은 "\r\n"이나 "\n"으로 올 수 있는데, 둘 다 "\n"을 포함하므로 그 문자를 세면 어느 쪽이든 동작합니다. 여기서 이스케이프가 선택 사항이 아닌 이유는 htmlspecialchars()에서 설명합니다.
줄바꿈으로 문자열 나누기
explode("\n", $text)는 직접 만든 텍스트에는 동작합니다. 사용자나 파일에서 온 텍스트는 줄 끝이 "\r\n", "\n", "\r"일 수 있습니다. \R이 모든 줄바꿈과 일치하므로 preg_split('/\R/', $text)가 모두 처리합니다.
문자열에서 줄바꿈 제거하기
여러 줄 텍스트를 한 줄로 만들려면 모든 종류의 줄 끝을 바꾸세요. 한 글자짜리보다 "\r\n"을 먼저 바꾸세요. 그렇지 않으면 Windows 줄바꿈 하나가 공백 두 개가 됩니다.
trim()과 rtrim()은 문자열 양 끝의 줄바꿈은 제거하지만 중간은 건드리지 않으므로, 파일에서 읽은 한 줄에는 맞는 도구이고 줄을 합치는 데는 맞지 않습니다.
자주 묻는 질문
PHP에서 echo로 줄을 바꾸려면 어떻게 하나요?
큰따옴표 문자열 안에 \n을 넣으세요: echo "Line 1\nLine 2";. 또는 상수를 붙이세요: echo 'Line 1' . PHP_EOL;. 브라우저에서는 줄바꿈이 보이지 않으므로 <br>이나 nl2br()를 쓰세요.
PHP에서 \n이 동작하지 않는 이유는 무엇인가요?
문자열이 작은따옴표 안에 있어서 '\n'이 백슬래시와 n이거나, 출력이 HTML로 표시되어 브라우저가 줄바꿈을 공백처럼 취급하기 때문입니다. 텍스트 출력에는 큰따옴표로 "\n"을, 웹 페이지에는 nl2br()나 <br>을 쓰세요.
PHP_EOL은 무엇인가요?
PHP가 실행되는 운영체제의 줄 끝 문자를 담은 상수입니다. Linux와 macOS에서는 "\n", Windows에서는 "\r\n"입니다. 터미널이나 로컬 파일용 출력에 쓰세요. HTTP, 이메일, CSV 파일은 보통 OS와 상관없이 형식이 줄 끝을 정합니다.
PHP에서 nl2br은 무엇을 하나요?
nl2br($text)는 문자열의 모든 줄바꿈 앞에 <br />을 넣으므로, <textarea>에 입력한 텍스트가 HTML로 표시될 때도 줄을 유지합니다. 먼저 이스케이프하세요: nl2br(htmlspecialchars($text)).
PHP에서 문자열의 줄바꿈을 제거하려면 어떻게 하나요?
세 종류의 줄 끝을 모두 바꾸세요: str_replace(["\r\n", "\r", "\n"], ' ', $text), 또는 정규식으로 preg_replace('/\R/', ' ', $text). 끝의 줄바꿈만 지우려면 rtrim($text, "\r\n")을 쓰세요.