mb_strpos()
함수 사용법
mb_strpos()
함수는
문자열에서 특정 문자열의 위치를 찾는 함수입니다.
strpos()
함수와 거의 동일한 기능을 하지만, 한글과 같은 multi-byte 문자열에서 안전하게 작동하는 기능을 제공한다는 큰 차이점이 있습니다.
- 대상 문자열에서 주어진 문자열이 처음 나타나는 위치(인덱스)를 반환합니다.
- 주어진 문자열이 포함되어 있지 않으면
false
를 반환합니다. - 대소문자를 구분합니다.
한글에서 strpos()
함수의 문제점
strpos()
함수는 한글과 같은 multi-byte 문자열을 지원하지 않아 원하지 않는 결과가 발생합니다.
영어, 숫자 등은 1byte이지만, 한글이나 중국어등은 2byte입니다. 2byte이상의 바이트로 표현되는 것을 "multi-byte(멀티바이트)"라고 합니다.
UTF-8과 같은 멀티바이트 문자 인코딩에서는 문자 하나가 여러 바이트로 표현되기 때문에, strpos()
함수와 같이 일반적인 바이트 수를 그대로 사용하여 문자열을 자르는 것은 예상치 못한 결과를 초래할 수 있습니다.
mb_strpos()
함수로 strpos()
함수의 한글 문제 해결
mb_strpos()
함수는 한글과 같은 multi-byte 문자열에서 안전하게 작동하는 기능을 제공하기 때문에 strpos()
함수의 한글 문제를 해결할 수 있습니다.
알아두세요!
mb_strpos()
함수는 strpos()
함수를 대신해서 안전하게 multi-byte로 작동하게 하는 함수입니다.
mb_strpos()
함수의 형식은 다음과 같습니다.
구문
매개변수
$haystack |
검색 대상이 되는 문자열입니다. |
---|---|
$needle |
검색할 문자열입니다.
|
$offset |
옵션. 검색을 시작할 0 기반의 인덱스입니다.
|
$encoding |
옵션. 문자열의 인코딩을 지정합니다.
기본값은 null 이며, UTF-8과 같은 표준 인코딩을 사용할 경우에는 별도로 지정하지 않아도 됩니다. 생략하거나 null 이면 내부 문자 인코딩 값이 사용됩니다. |
반환 값
대상 문자열에서 주어진 문자열($needle
)이 처음 나타나는 위치(인덱스)를 반환합니다.
문자열 위치는 1
이 아닌 0
부터 시작한다는 점에 유의하세요.
주어진 문자열($needle
)이 포함되어 있지 않으면 false
를 반환합니다.
주의할 점
mb_strpos()
함수는 대소문자를 구분합니다.
만약 대소문자를 구분하지 않고 문자열에서 특정 문자열의 위치를 찾고자 한다면, mb_stripos()
함수를 사용하세요.
문자열에서 인덱스는 0
부터 시작합니다.
첫 번째 문자열의 인덱스는 0
이고, 두 번째 문자열의 인덱스는 1
입니다.
PHP 8 이전의 버전에서는 검색할 문자열에 빈 문자열(''
)을 허용하지 않습니다.
이 함수를 부울(boolean) 타입으로 반환 값을 사용할 때에는 주의가 필요합니다.
이 함수의 반환 값을 테스트하려면 ===
연산자를 사용하세요 .
대상 문자열에서 주어진 문자열의 위치가 첫 번째에 위치하고 있다고 가정해 보겠습니다.
이 경우 반환 값은 0
이 됩니다.
0
은 ==
연산자로 변환하면 false
를 반환하게 됩니다.
실제 주어진 문자열이 존재하지만 false
를 반환하기 때문에 Boolean
타입으로 반환 값을 테스트하려면 엄격한 타입 비교가 수행되어 하기 때문에 ===
연산자를 사용해야 합니다.