PHP 프로그래밍을 하다 보면 여러 줄로 된 문자열의 줄바꿈을 제거하고 공백 하나로 합쳐야 하는 경우가 자주 있습니다. 이번 글에서는 trim()과 preg_replace() 함수를 활용해 이 문제를 간단하게 해결하는 방법을 알아보겠습니다.
문제 상황
다음과 같이 줄바꿈이 포함된 문자열이 있다고 가정해 보겠습니다.
$sentence = " My name is John Smith My Favorite subject is PHP. ";
이 문자열에서 줄바꿈을 모두 제거하고 공백 하나로 바꾸면 결과는 다음과 같아야 합니다.
My name is John Smith My Favorite subject is PHP.
해결 방법
preg_replace() 함수로 연속된 공백 문자(줄바꿈 포함)를 공백 하나로 치환한 뒤, trim()으로 문자열 앞뒤의 불필요한 공백을 제거하면 됩니다.
예제 코드
<!DOCTYPE html>
<html>
<body>
<?php
$sentence = "
My name is John Smith
My Favorite subject is PHP.
";
$sentence = trim(preg_replace('/\s\s+/', ' ', $sentence));
echo $sentence;
?>
</body>
</html>실행 결과
위 코드를 실행하면 다음과 같은 출력이 나옵니다.
My name is John Smith My Favorite subject is PHP.
코드 설명
- preg_replace('/\s\s+/', ' ', $sentence) : 정규 표현식
\s\s+는 공백 문자가 두 개 이상 연속으로 나타나는 부분을 의미합니다. 여기에는 줄바꿈(\n), 캐리지 리턴(\r), 탭(\t), 일반 공백 등이 모두 포함되며, 이를 공백 하나로 통일합니다. - trim() : 문자열 시작과 끝에 남아 있을 수 있는 공백이나 줄바꿈 문자를 제거합니다. 예제처럼 문자열 맨 앞이나 맨 끝에 줄바꿈이 있을 때 반드시 필요합니다.
참고 : str_replace를 사용하는 방법
정규식 없이 단순히 줄바꿈만 제거하고 싶다면 str_replace()를 사용할 수도 있습니다.
$sentence = trim(str_replace(["\r\n", "\n", "\r"], ' ', $sentence));
다만 이 방법은 연속된 공백이 여러 개일 경우 공백이 중복되어 남을 수 있습니다. 따라서 어떤 종류의 공백 문자든 깔끔하게 하나로 정리하려면 정규식 기반의 preg_replace() 방식을 사용하는 것이 더 안전하고 확실합니다.