HOWTO · PHP
PHP의 문자열에서 마지막 문자 제거
이 기사에서는 PHP의 문자열에서 마지막 문자를 제거하는 방법을 소개합니다. 여기에는 rtrim() 함수와 substr() 함수가 포함됩니다. PHP에서 문자열을 조작하는 가장 좋은 방법을 알아보고 실용적인 예제와 명확한 설명으로 프로그래밍 기술을 향상시키세요.
이 페이지의 내용
PHP 문자열의 끝에서 콘텐츠 제거
PHP 문자열의 끝에서 콘텐츠를 제거하려면 제거할 대상에 따라 함수를 선택하세요. 지정된 문자 집합에 속하는 후행 바이트를 임의의 개수로 제거하려면 rtrim()를 사용하세요. 마지막 바이트를 제외한 문자열을 유지하려면 길이가 -1인 substr()를 사용하세요. PHP 문자열은 바이트 중심이므로 “문자”가 완전한 유니코드 문자를 의미하는 경우에는 멀티바이트를 지원하는 함수를 사용하세요.
rtrim()을 사용하여 후행 문자 집합 제거
rtrim()은 문자열의 오른쪽에서 문자 마스크라고 불리는 두 번째 인수에 속하는 동안 문자를 제거합니다. 마스크는 하나의 완전한 시퀀스로 일치해야 하는 접미사가 아니라 대상 문자의 집합입니다. 이 함수는 마스크에 없는 바이트에 도달할 때까지 해당 집합의 바이트를 계속 제거합니다. 그 결과, 서로 다른 여러 후행 문자와 한 문자의 반복 복사본을 제거할 수 있습니다.
두 구두점 중 하나로 끝날 수 있는 값에 대해, 이 완전한 예제는 마스크 !?를 적용합니다.
<?php
$value = "report!?!!";
$clean = rtrim($value, "!?");
echo $clean, PHP_EOL;
report
후행 느낌표와 물음표는 모두 마스크에 속하므로, 앞의 t에 도달할 때까지 각각 끝에서 제거됩니다.
규칙이 “이 집합에서 후행 구두점이나 패딩을 제거”인 경우 이 방법을 사용하세요. 제거할 수 있어야 하는 문자만 지정하세요. 예를 들어, 마스크 !?.는 그 세 문자의 모든 시퀀스를 끝에서 제거할 수 있도록 허용합니다. “리터럴 접미사 !?.를 제거”한다는 의미는 아닙니다. 문자열이 마스크 외부의 문자로 끝나면, 그 문자와 그 앞의 모든 것이 그대로 남습니다. 빈 문자열은 빈 상태로 유지됩니다.
substr()을 사용하여 마지막 문자 제거
정확히 마지막 문자를 제거하는 것이 목표인 ASCII 문자열의 경우, substr($string, 0, -1)은 접두사를 유지하고 마지막 바이트를 생략합니다. 시작 오프셋 0은 문자열의 시작 지점에서 시작합니다. 음수 길이는 끝에서 거꾸로 세므로, -1은 반환되는 부분이 끝보다 한 바이트 앞에서 멈추게 합니다.
<?php
$string = "Hello World!";
$withoutLastByte = substr($string, 0, -1);
echo $withoutLastByte, PHP_EOL;
Hello World
이 코드는 마지막 바이트가 문자, 구두점 또는 공백인지에 관계없이 이를 생략합니다. rtrim()과 달리 바이트의 값을 확인하지 않습니다.
PHP 문자열과 substr()은 바이트 중심입니다. UTF-8에서는 표시되는 한 문자가 여러 바이트를 사용할 수 있으므로, 멀티바이트 문자로 끝나는 문자열에서 한 바이트를 제거하면 완전한 한 문자를 제거하는 대신 불완전한 바이트 시퀀스가 남을 수 있습니다. 유니코드 문자 하나를 제거하려면 mbstring 확장을 활성화한 상태에서 mb_substr($string, 0, -1, 'UTF-8')를 사용하세요. 데이터가 UTF-8이 아닌 경우에는 데이터와 일치하는 인코딩을 선택하세요.
올바른 접근 방식을 선택하고 경계 케이스 처리
rtrim()은 제거 규칙이 후행 문자 집합을 명명하고 그 중 여러 개를 제거할 수 있을 때 사용하세요. substr()은 값에 관계없이 고정된 수의 바이트를 버리는 것이 규칙일 때 사용하세요. 일반 ASCII 값과 마지막 문자 하나에 대해서는 substr($string, 0, -1)이 그 의도를 직접 표현합니다. 여러 가지 가능한 문자로 이루어진 패딩의 경우, rtrim()에 원하는 정확한 마스크를 제공하세요.
두 함수 모두 문자열을 반환합니다. 어느 쪽도 원래 변수를 제자리에서 변경하지 않습니다. 이후 코드에서 정리된 값이 필요하면 결과를 할당하세요. 방법을 선택하기 전에 입력이 비어 있을 수 있는지, 대상 문자가 실제로 끝에 존재하는지, 데이터가 멀티바이트 인코딩을 사용하는지를 고려하세요. 빈 문자열은 어느 연산을 사용하든 빈 상태로 유지되며, rtrim()은 일치하지 않는 끝부분을 그대로 둡니다. substr()은 의미를 확인하지 않고 한 바이트를 여전히 제거합니다.
실용적인 규칙은 후행 문자 집합에는 rtrim()을, 고정된 바이트 수에는 substr()을 사용하는 것입니다. 애플리케이션에서 “문자”가 완전한 유니코드 코드 포인트를 의미한다면, 대응하는 멀티바이트 문자열 함수를 사용하고 그 확장과 인코딩이 구성되어 있는지 확인하세요. 이러한 구분은 예제를 응용할 때도 도움이 됩니다. 마스크를 변경하여 제거할 수 있는 후행 바이트를 정의하거나, substr() 길이를 변경하여 생략할 바이트 수를 정의하세요.