PHP의 substr, mb_substr, iconv_substr 및 graphme_substr 함수는 제공된 문자열의 일부를 검색하는 방법을 제공합니다.
PHP 8 이전에는 오프셋 매개 변수가 제공된 문자열 자체보다 길면 부울 false를 반환했습니다. 이것은 반환 유형으로 문자열을 언급 한 문서화 된 함수 서명을 위반했습니다.
예를 들어 PHP 8 이전에는 다음 코드 조각이 이러한 함수에 대해 false를 반환합니다.
substr('FooBar', 42, 3); // false
mb_substr('FooBar', 42, 3); // ""
iconv_substr('FooBar', 42, 3); // false
grapheme_substr('FooBar', 42, 3); // false
위의 스니펫에서 문자열 오프셋 매개 변수는 42이지만 문자열 자체는 6 자입니다. 다른 확장의 substr 및 보완 함수 (mb_string 제외)는 false를 반환합니다.
PHP 8에서는 이러한 함수의 동작이 변경되었습니다.
substr
substr은 오프셋이 문자열 길이보다 크면 빈 문자열을 반환합니다. PHP 8 이전에는 false를 반환했습니다.
substr('FooBar', 42); // ""
mb_substr
mb_substr은 모든 PHP 버전에서 이미 빈 문자열을 반환하며 PHP 8.0에서는 변경되지 않습니다.
iconv_substr
iconv_substr은 오프셋이 제공된 문자열의 길이보다 큰 경우 false를 반환합니다. 이것은 PHP 8에서 빈 문자열을 반환하도록 변경되었습니다.
iconv_substr('FooBar', 42); // ""
음수 문자열 오프셋에서 iconv_substr 함수는 오프셋을 문자열 길이로 고정합니다.
iconv_substr('FooBar', -42, 4); // "FooB"
grapheme_substr
grapheme_substr은 오프셋이 문자열 길이보다 크면 빈 문자열을 반환합니다. PHP 8 이전에는 substr과 유사한 false를 반환했습니다.
grapheme_substr('FooBar', 42); // ""
이것은 이제 다음 모든 함수에 적용됩니다.
substr('FooBar', 42, 3); // ""
mb_substr('FooBar', 42, 3); // ""
iconv_substr('FooBar', 42, 3); // ""
grapheme_substr('FooBar', 42, 3); // ""
오프셋 매개 변수는 음수 문자열 일 수 있으며, 이는 substr이 제공된 문자열의 끝에서 계산 된 문자열의 일부를 반환하도록 합니다. 음수 문자열 오프셋이 문자열 길이를 초과하면 커서가 그 길이를 넘지 않습니다. 이 기능은 substr 및 mb_substr 함수에 대해 변경되지 않았습니다.
iconv_substr 및 grapheme_substr 함수는 이제 substr 및 iconv_substr 함수 다음에 음의 오프셋을 문자열 길이로 고정합니다.
PHP < 8.0 | PHP >= 8.0 | |
---|---|---|
substr('FooBar', 42) | false | "" |
substr('FooBar', -42, 4) | "FooB" | "FooB" |
mb_substr('FooBar', 42) | "" | "" |
mb_substr('FooBar', -42, 4) | "FooB" | "FooB" |
iconv_substr('FooBar', 42) | false | "" |
iconv_substr('FooBar', -42, 4) | false | "FooB" |
grapheme_substr('FooBar', 42) | false | "" |
grapheme_substr('FooBar', -42, 4) | false | "FooB" |
이전 버전과의 호환성 영향
substr 및 iconv_substr 함수의 반환 유형은 이제 이전 string | false에서 문자열이 되며 mb_substr 함수와 일치합니다.
이러한 함수가 false로 값을 반환하는 데 의존하는 경우 이제 대신 빈 문자열 ( "")을 반환합니다. 이는 의미 상 더 정확한 동작입니다.
이 변경은 PHP 8.0 베타 4 (최종 베타)가 출시 된 이후에 이루어졌습니다. GA (일반 공급) 버전을 포함하여 PHP 8.0 버전 RC1 이상에서만 유효합니다. RC1 이전의 PHP 8.0 버전에서 grapheme_substr 함수는 유효하지 않은 오프셋에서 ValueError 예외를 던지도록 설정되었습니다.
https://php.watch/versions/8.0/substr-out-of-bounds
등록된 댓글이 없습니다.