substr()
함수의 정의 및 사용법
substr()
함수는
문자열에서 주어진 특정 위치부터 특정 길이만큼의 문자열을 잘라서 추출하는 함수입니다.
echo substr('Hello world!', 6, 5);
// 'Hello World!' 문자열의 7번 째부터 5개의 문자열을 잘라서 추출함
배열에서는 array_slice()
함수가 정 범위의 요소를 잘라내어 추출한 결과를 새로운 배열로 반환합니다.
substr()
함수의 형식은 다음과 같습니다.
구문
substr(string $string, int $start, int|null $length = null): string|false
매개변수
$string |
필수. 잘라서 추출하고자 하는 원본 문자열입니다. |
---|---|
$start |
필수. 잘라서 추출을 시작할 위치입니다.
0 부터 시작하여 문자열의 첫 번째 문자는 0 번 인덱스입니다. 음수 값을 사용하는 경우, 문자열의 끝에서부터 역으로 카운트하게 됩니다. 예를 들어, -1 은 문자열의 마지막 문자를 나타내며, -2 는 끝에서 두 번째 문자를 나타냅니다. |
$length |
옵션. 잘라서 추출할 문자열의 길이입니다.
기본값은 null 이며, 이 경우 시작 위치부터 문자열의 끝까지 모든 문자를 추출합니다. |
반환 값
substr()
함수는 성공적으로 부분 문자열을 추출할 경우 해당 부분 문자열을 반환합니다.
- PHP 버전 8.0.0 이전에는 실패할 경우
false
를 반환합니다. - PHP 버전 8.0.0 이후에는 실패할 경우 빈 문자열(
''
)을 반환합니다. 이로써 반환 값의 일관성을 유지하고 오류 처리를 예측 가능하게 만듭니다.
$length
매개변수가 null
일 경우
- PHP 8.0.0 이전 버전에서는 빈 문자열(
''
)을 반환합니다. - PHP 8.0.0 버전부터는
$length
를 명시적으로null
로 설정할 수 있게 변경되었습니다.$length
매개 변수를 명시적으로null
로 설정하면 문자열의 끝에서 끝나는 부분 문자열을 반환합니다.
사용법
substr()
함수의 사용법을 알아보겠습니다.
기본 사용법
$originalString = 'Hello, world!';
$start = 7; // 시작 위치
$length = 5; // 잘라서 추출할 길이
$extractedString = substr($originalString, $start, $length);
if ($extractedString != false) {
echo '추출된 문자열: ' . $extractedString;
} else {
echo '문자열 추출 실패';
}
// 출력: '추출된 문자열: world'
이 코드에서는 원본 문자열 "Hello, world!"에서 7번 인덱스부터 시작하여 길이가 5인 문자열 "world"를 추출하고 출력합니다.
$start
파라미터에 음수 값을 사용하는 예제: 문자열을 뒤에서부터 찾는 방법
substr()
함수의 $start
파라미터에 음수 값을 사용하는 경우, 문자열의 끝에서부터 역으로 카운트하게 됩니다. 예를 들어, -1은 문자열의 마지막 문자를 나타내며, -2는 끝에서 두 번째 문자를 나타냅니다.
다음은 $start
파라미터에 음수 값을 사용하는 예제입니다.
$originalString = 'Hello, world!';
$startNegative = -6; // 끝에서부터 6번째 문자부터 시작
$length = 5; // 추출할 길이
$extractedString = substr($originalString, $startNegative, $length);
echo '추출된 문자열: ' . $extractedString;
// 출력: '추출된 문자열: world'
이 코드에서 $startNegative
변수에 -6
을 할당했습니다. 이는 문자열 "Hello, world!"의 끝에서부터 6번째 문자부터 시작하여 길이가 5인 문자열 "world"를 추출하게 됩니다.
다음의 예제들은 $start
파라미터에 음수 값을 사용하는 추가 예제 코드입니다.
// 첫 번째 예제
// "Hello world" 문자열의 0번째 인덱스부터 시작하여 -1번째 인덱스까지의 부분 문자열을 반환합니다.
// -1번째 인덱스는 문자열의 끝을 나타내므로, "Hello worl"을 출력합니다.
echo substr('Hello world', 0, -1); // 0번째 인덱스부터 시작하여 -1번째 인덱스까지 출력
// => "Hello worl"
// 두 번째 예제
// "Hello world" 문자열의 -9번째 인덱스부터 시작하여 -3번째 인덱스까지의 부분 문자열을 반환합니다.
// -9번째 인덱스는 문자열의 0번째 인덱스보다 작으므로, 문자열의 끝에서부터 인덱스를 계산합니다.
// -3번째 인덱스는 문자열의 6번째 인덱스를 나타내므로, "llo wo"를 출력합니다.
echo substr('Hello world', -9, -3); // -9번째 인덱스부터 시작하여 -3번째 인덱스까지 출력
// => "llo wo"
// 세 번째 예제
// "Hello world" 문자열의 0번째 인덱스부터 시작하여 -4번째 인덱스까지의 부분 문자열을 반환합니다.
// -4번째 인덱스는 문자열의 3번째 인덱스를 나타내므로, "Hello w"를 출력합니다.
echo substr('Hello world', 0, -4); // 0번째 인덱스부터 시작하여 -4번째 인덱스까지 출력
// => "Hello w"
substr()
함수의 $start
파라미터에 음수 값을 사용하는 것은 생각보다 헷갈리는 경우가 많으니 위 예제들을 잘 참고하시기 바랍니다.
substr()
함수의 한글의 인코딩 문제: mb_substr()
함수 사용
substr()
함수를 사용할 때 한글 문자열의 인코딩 문제가 발생할 수 있습니다.
이는 UTF-8과 같은 멀티바이트 문자 인코딩을 사용하는 경우에 주로 발생하는 문제입니다.
영어, 숫자 등은 1byte이지만, 한글이나 중국어등은 2byte입니다. 2byte이상의 바이트로 표현되는 것을 "멀티바이트"라고 합니다.
UTF-8과 같은 멀티바이트 문자 인코딩에서는 문자 하나가 여러 바이트로 표현되기 때문에, 일반적인 바이트 수를 그대로 사용하여 문자열을 자르는 것은 예상치 못한 결과를 초래할 수 있습니다. substr()
함수는 바이트 단위로 문자열을 자르기 때문에, 멀티바이트 문자의 중간에서 자를 경우 문자가 깨져 나올 수 있습니다.
substr()
함수의 한글의 인코딩 문제
echo substr('반갑습니다. 환영합니다.', 7, 5);
이러한 문제를 해결하기 위해서는 mb_substr()
함수를 사용하여 멀티바이트 문자열을 제대로 자를 수 있습니다. mb_substr()
함수는 멀티바이트 문자열을 지원하며, 정확한 문자 단위로 문자열을 자를 수 있습니다.
다음은 mb_substr()
함수를 사용한 예시입니다.
echo mb_substr('반갑습니다. 환영합니다.', 7, 5);
위의 코드에서는 mb_substr()
함수를 사용하여 멀티바이트 문자열을 올바르게 추출하고 있습니다.
따라서 한글이 포함된 문자열을 다룰 때에는 mb_substr()
함수를 사용하여 문자열을 올바르게 자르도록 주의해야 합니다.
알아두세요!
mb_substr()
함수는 substr()
함수를 안전한게 multi-byte로 작동하게 하는 함수입니다.
같이 보기
- PHP is_string() 함수 - 변수의 문자열(string) 타입 확인
- PHP strlen() 함수 - 문자열 길이 확인
- PHP mb_substr() 함수 – substr()의 한글 깨짐을 해결하기
- PHP str_split() 함수 - 문자열을 일정한 길이의 부분 문자열로 분할
- PHP mb_str_split() 함수 - str_split()의 한글 지원 기능 제공
- PHP preg_replace() 함수
- PHP str_replace() 함수 – 문자열에서 특정 문자열을 다른 문자열로 바꾸는 함수
- PHP str_contains() 함수 - 문자열에 특정 문자 있는지 확인
- PHP strpos() 함수 - 문자열에 특정 문자 포함 여부 확인
- PHP stripos() 함수 – 대소문자를 구분 없이 문자열에 특정 문자 포함 여부 확인
- PHP mb_strpos() 함수 - strpos()의 한글 지원 기능 제공
- PHP mb_stripos() 함수 – stripos()의 한글 지원 기능 제공
- PHP preg_match() 함수
- PHP preg_match_all() 함수 - 개념 정리 및 사용 예제