Multibyte 캐릭터 인코딩을 처리 할 때 PHP는 ICONV_STRRPOS 기능을 제공하여 문자열에서 하위 문자열의 마지막 발생을 찾습니다. 이 기능은 기존의 STRRPO가 바이트 분할 오류로 인해 위치 계산이 잘못 정렬 될 수 있기 때문에 UTF-8과 같은 다중 바이트 인코딩을 처리하는 데 특히 중요합니다. 그러나 PHP 버전의 업그레이드를 통해 ICONV_STRRPOS 의 동작도 세부 사항이 변경되며 이러한 차이를 이해하는 것은 개발자가 잠재적 호환성 문제를 피하는 데 중요합니다.
Iconv_strrpos 사용은 strrpos 와 유사하며 함수 정의는 다음과 같습니다.
int iconv_strrpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = ini_get("iconv.internal_encoding") ]] )
$ haystack : 검색 할 문자열.
$ 바늘 : 찾을 수있는 서브 스트링.
$ OFFSET : 시작 위치를 검색합니다 (기본값은 0이고 음수는 지원됩니다).
$ 인코딩 : 문자열 인코딩, 기본값은 iconv.internal_encoding 에서 가져옵니다.
반환 값은 $ 바늘이 나타날 때 마지막 문자 위치 (바이트가 아닌 문자에 따라)이며 찾을 수없는 경우 False를 반환합니다.
ICONV_STRRPOS는 $ 오프셋 매개 변수를 처리 할 때 불안정합니다. 부정적인 오프셋은 때때로 작동하지 않으며 심지어 오류 반환으로 이어질 수도 있습니다.
기본 인코딩은 iconv.internal_encoding 에 따라 다릅니다. 명시 적으로 설정되지 않으면 멀티 바이트 인코딩 인식이 실패 할 수 있습니다.
일부 버그로 인해 $ 니들 길이가 1보다 클 때 함수가 예외를 반환합니다.
$ 오프셋을 처리하는 것이 더 정확하고, 음수 지원이 완벽하며, 문서 설명과 일치합니다.
기본 인코딩 매개 변수는 명시 적으로 통과하고 구성에 대한 종속성을 줄이며 다른 환경으로 인한 차이를 피하는 것이 좋습니다.
$ 니들 멀티 바이트 스트링이 일치 할 때 반환 편차, 성능 및 안정성 개선을 해결했습니다.
일부 PHP 7.2 버전 이전에는 특정 에지 버그가 있었으며보다 신뢰할 수있는 성능을 위해 PHP 7.3+로 업그레이드하는 것이 좋습니다.
iconv_strros는 올바른 인코딩 매개 변수에 따라 다릅니다. 그렇지 않으면 문자열 길이가 잘못 판단되거나 일치하는 것이 실패합니다. $ 인코딩을 명시 적으로 전달하십시오.
$pos = iconv_strrpos($str, $needle, 0, 'UTF-8');
$ 오프셋은 바이트가 아닌 문자 기반 색인입니다.
음의 오프셋은 문자열 끝의 역수로부터 계산 된 시작점을 나타냅니다.
초기 PHP 버전은 부정적인 오프셋에 대한 지원이 좋지 않았으므로 사용할 때 버전 호환성에주의를 기울여야합니다.
비 바이트 위치 (0부터 시작) 문자 위치를 반환합니다.
거짓을 찾을 수없고, 유형을 판단 할 때 False 및 Integer 0이 쉽게 혼란스러워지면 합동 판단을 사용하는 것이 좋습니다.
if ($pos === false) {
echo "서브 스트링이 발견되지 않았습니다";
} else {
echo "위치는입니다: $pos";
}
$ 니들 에게 멀티 바이트 문자가 포함 된 경우 PHP 7+는 처리에 더 정확합니다. ICONV_STRRPOS 대신 단일 바이트 문자열 함수를 사용하지 않으려면 오류가 오류를 피하거나 오프셋하십시오.
<?php
// 가정 $str 중국어에 포함
$str = "이것은 테스트 문자열 테스트입니다";
// PHP 7+ 권장 글쓰기,명확하게 인코딩되었습니다
$needle = "시험";
$pos = iconv_strrpos($str, $needle, 0, 'UTF-8');
if ($pos !== false) {
echo "마지막으로 나타납니다: $pos\n";
} else {
echo "서브 스트링이 발견되지 않았습니다\n";
}
산출:
마지막으로 나타납니다: 8
이전 버전에서 인코딩이 지정되지 않으면 오류 또는 오 탐지가 출력 될 수 있습니다.
ICONV_STRRPOS 는 멀티 바이트 스트링 처리에서 필수 기능이지만 동작은 PHP 버전 및 인코딩 설정에 따라 다릅니다.
기본 구성에 의존하지 않도록 개발 중에 인코딩을 명시 적으로 전달해야합니다.
음수 $ 오프셋 값 지원의 경우 PHP 7 이상을 사용해야합니다.
반환 값을 사용하여 0 과 false 사이의 혼란을 방지 할 때 유형 판단에주의하십시오.
PHP 버전을 업그레이드하여 프로그램이 올바르게 실행되도록 관련 기능에 대한 호환성 테스트를 수행하는 것이 좋습니다.