trim($string)은 시작과 끝에서 공백 문자를 제거한 문자열을 반환합니다. 공백, 탭, 줄바꿈, 캐리지 리턴, NUL 바이트, 수직 탭입니다. ltrim()은 시작에서만, rtrim()은 끝에서만 제거합니다. 중간의 공백은 유지됩니다.
var_dump() 출력은 각 결과의 길이를 보여 주므로 제거된 문자를 확인할 수 있습니다. trim은 폼에서 온 대부분의 값에 가장 먼저 할 일입니다(비밀번호는 예외이며, 페이지 끝을 보세요). 끝에 공백을 붙여 ada@example.com 을 입력한 사용자도 로그인할 수 있어야 합니다.
문법
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()은 새 문자열을 반환하며, 넘긴 변수를 바꾸지 않습니다.
특정 문자 trim하기
두 번째 인수는 기본 목록을 대체합니다. 목록의 모든 문자가 순서와 횟수에 상관없이 양 끝에서 제거됩니다. ..는 범위를 정의하므로 'a..z'는 모든 소문자를 뜻합니다.
일반 공백 문자도 계속 제거하려면 목록에 포함하세요: trim($s, " \n\r\t\v\0/").
두 번째 인수는 문자열이 아니라 문자 집합
trim()은 단어나 접미사를 제거하지 않습니다. 목록에 있는 문자라면 무엇이든, 목록에 없는 문자를 만날 때까지 양 끝에서 제거합니다. 파일 확장자를 떼려는 사람들이 이 때문에 놀랍니다.
첫 번째 줄은 h가 집합에 있으므로 시작 부분의 h도 제거합니다. 고정된 접두사나 접미사를 제거하려면 str_starts_with()나 str_ends_with()를 substr()와 함께 쓰거나, 그 텍스트가 다른 곳에 나올 수 없다면 str_replace()를 쓰세요.
전각 공백 trim하기(일본어 입력)
일본어 키보드는 폼에 입력한 이름 주변 등에서 전각 공백 (U+3000)을 자주 만듭니다. 이는 trim의 기본 목록에 없고, 두 번째 인수에 넣는 것은 함정입니다. trim()은 바이트 단위로 동작하고, 이 공백은 3바이트 E3 80 80인데, E3은 모든 히라가나와 가타카나 문자의 첫 바이트이기도 해서 그런 문자로 시작하는 이름은 그 문자의 첫 바이트를 잃습니다. u 수식어를 붙인 정규 표현식을 쓰세요.
\A와 \z는 문자열의 시작과 끝에 고정합니다. u 수식어가 있으면 \s는 모든 유니코드 공백과 일치합니다. ASCII 공백 문자, 전각 공백, 웹 페이지에서 복사해 붙여 넣을 때 자주 따라오는 줄 바꿈 없는 공백(U+00A0)입니다. u가 없으면 \s는 ASCII 공백 문자만 일치하고 전각 공백은 남습니다. PHP 8.4에는 이를 위한 mb_trim(), mb_ltrim(), mb_rtrim()이 추가되었고, PHP 8.3 이하에서는 정규식이 방법입니다.
배열의 모든 값 trim하기
array_map('trim', $array)는 각 값을 trim하고 키를 유지합니다. 텍스트 필드에서 온 쉼표 구분 목록을 explode()로 나눈 경우가 대표적입니다.
검증 전에 폼 값 trim하기
먼저 trim한 다음 빈 문자열인지 확인하세요. 그러면 공백만 든 필드가 빈 값으로 거부됩니다. 이 블록을 실행하고, 폼에 앞뒤로 공백이 있는 이름을 입력한 뒤 Send를 누르세요. $_POST가 채워진 채로 같은 스크립트가 다시 실행됩니다.
비밀번호는 trim하지 마세요. 비밀번호 끝의 공백도 비밀번호의 일부입니다.
자주 묻는 질문
PHP에서 trim()은 무엇을 제거하나요?
기본적으로 문자열 양 끝에서 공백, 탭(\t), 줄바꿈(\n), 캐리지 리턴(\r), NUL 바이트(\0), 수직 탭(\v)을 제거합니다. 문자열 중간은 건드리지 않습니다.
trim, ltrim, rtrim의 차이는 무엇인가요?
trim()은 양 끝을, ltrim()은 시작만, rtrim()은 끝만 정리합니다. 셋 다 제거할 문자 목록을 선택적으로 같은 방식으로 받습니다.
trim()이 전각 공백을 제거하지 못하는 이유는 무엇인가요?
전각 공백(U+3000)은 trim의 기본 목록에 없고 UTF-8에서 3바이트입니다. preg_replace('/\A\s+|\s+\z/u', '', $s)를 쓰세요. u 수식어가 있으면 \s가 U+3000을 포함한 모든 유니코드 공백과 일치합니다. PHP 8.4에는 이것도 제거하는 mb_trim()이 추가되었습니다.
PHP에서 문자열의 마지막 쉼표를 제거하려면 어떻게 하나요?
rtrim($s, ',')는 끝의 쉼표를 모두 제거합니다. 뒤에 공백이 올 수 있다면 공백도 포함하세요: rtrim($s, ', ').
배열의 모든 값을 trim하려면 어떻게 하나요?
array_map('trim', $array)는 키를 유지하면서 모든 값을 trim한 새 배열을 반환합니다. 중첩 배열에는 참조와 함께 array_walk_recursive()를 쓰세요.