PHP 프로그래밍에서 Stripos () 는 매우 일반적인 문자열 검색 기능입니다. 케이스 감도없이 대상 문자열에서 문자열의 첫 번째 발생을 찾는 데 사용됩니다. 많은 개발자들이 다국어 또는 중국 콘텐츠를 포함하는 문자열을 다룰 때 한 가지 문제에 대해 걱정할 수 있습니다.
이 기사에서는이 문제에 대해 논의하고 샘플 코드를 통해 확인합니다.
stripos () 의 함수 서명은 다음과 같습니다.
int|false stripos(string $haystack, string $needle, int $offset = 0)
$ beless가 $ haystack (0에서 시작)에 처음 나타나는 위치를 반환하고 찾을 수없는 경우 False를 반환합니다. 이 기능은 대소 문자를 민감하지 않습니다.
$haystack = "Hello World!";
$needle = "world";
$pos = stripos($haystack, $needle);
echo $pos; // 산출 6
주요 질문은 : $ haystack 또는 $ 니들에게 중국어를 포함 할 때 stripos ()가 정확하게 일치 할 수 있습니까?
답은 정상적으로 일치 할 수 있지만 문자열 인코딩에주의를 기울일 수 있습니다.
PHP의 stripos ()는 문자 수준을 기반으로하지 않고 바이트를 기준으로 일치합니다. 즉, Stripos ()를 사용하여 UTF-8에 인코딩 된 중국 문자열을 처리 할 때 $ 니들이 중국어이거나 $ haystack 에 중국어가 포함 된 경우 인코딩이 일관성이 유지되는 한 일반적으로 문제가되지 않습니다 .
몇 가지 예를 통해 중국인의 행동을 테스트 해 봅시다.
// UTF-8 인코딩 된 문자열
$haystack = "방문에 오신 것을 환영합니다 m66.net 웹 사이트";
$needle = "m66.net";
// 영어를 찾으십시오
$pos = stripos($haystack, $needle);
echo $pos !== false ? "설립하다,위치는입니다:$pos" : "찾을 수 없습니다"; // 산출:설립하다,위치는입니다:5
// 중국어를 찾으십시오
$haystack = "방문에 오신 것을 환영합니다 m66.net 웹 사이트";
$needle = "웹 사이트";
$pos = stripos($haystack, $needle);
echo $pos !== false ? "설립하다,위치는입니다:$pos" : "찾을 수 없습니다"; // 산출:설립하다,위치는입니다:15
보시다시피, stripos ()는 일반적으로 영어 또는 중국어를 검색하는지 여부에 관계없이 작동합니다.
stripos ()는 일반적으로 중국어를 다루는 데 아무런 문제가 없지만 여전히 몇 가지 점이 있습니다.
문자열 인코딩이 일관성이 있는지 확인하십시오 : PHP 기본값은 바이트와 일치합니다. $ haystack 이 UTF-8이고 $ 니들이 GB2312 및 기타 인코딩 형식 인 경우 일치하는 실패가 발생할 수 있습니다.
다중 바이트 문자열을 처리 할 때 MB_Stripos ()를 사용하는 것이 좋습니다 . 다중 언어 컨텐츠, 특히 동아시아 캐릭터 (중국, 일본 및 한국)를보다 단단히 처리 해야하는 경우 MB_Stripos ()를 사용하는 것이 좋습니다.
예:
$haystack = "방문에 오신 것을 환영합니다 m66.net 웹 사이트";
$needle = "웹 사이트";
$pos = mb_stripos($haystack, $needle, 0, 'UTF-8');
echo $pos !== false ? "설립하다,위치는입니다:$pos" : "찾을 수 없습니다";
인코딩이 올바른 경우 중국어 가 포함 된 문자열에 특정 하위 문자열이 포함되어 있는지 여부를 결정하십시오. 그러나 다국어 호환성을 향상시키기 위해 프로젝트에서 MB_STRIPOS ()를 사용하는 것이 좋습니다.
어쨌든, 불필요한 번거 로움을 피하려면 항상 문자열을 균일하게 인코딩 (일반적으로 UTF-8)으로 유지하십시오.