PHP 개발에서 다중 바이트 문자열 (예 : 중국어, 일본어, 한국 및 기타 문자 포함 문자열)을 다룰 때 strrrpos () 와 같은 기존의 문자열 기능은 종종 문자 경계 문제를 올바르게 처리하지 못하므로 가로 채기 오류 또는 검색 실패로 이어질 수 있습니다. Multibyte 문자 세트를 더 잘 지원하기 위해 PHP는 iconv_strrpos () 함수를 제공합니다. 이 기사는 인코딩의 문자열에서 마지막 위치를 올바르게 찾을 수 있도록이 기능의 기본 사용, 매개 변수 의미 및 사용 예방 조치를 자세히 도입합니다.
iconv_strrpos () 는 ICONV 확장의 함수로, 하위 문자열이 문자열에 마지막으로 나타나는 시간을 찾습니다. strrpos () 와 달리 멀티 바이트 인코딩을 처리 할 때 문자 경계를보다 정확하게 식별 할 수 있습니다.
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">iconv_strrpos</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span> [, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$charset</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ini_get</span></span><span>(</span><span><span class="hljs-string">"iconv.internal_encoding"</span></span><span>)] )
</span></span>$ haystack : 검색 할 대상 문자열.
$ 바늘 : 찾을 수있는 서브 스트링.
$ charset (선택 사항) : 문자열의 문자 세트 인코딩을 지정합니다. 설정하지 않으면 iconv.internal_encoding 설정은 기본적으로 사용됩니다.
$ beless가 $ haystack (0부터 시작)에 나타나고 찾을 수없는 경우 False를 반환합니다.
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"hello world, welcome to the world of PHP"</span></span><span>;
</span><span><span class="hljs-variable">$pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strrpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">"world"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$pos</span></span><span>; </span><span><span class="hljs-comment">// 산출 27</span></span><span>
</span></span>이 예에서 문자열 "세계"가 마지막으로 나타나는 것은 색인 27입니다.
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"안녕하세요,세계。안녕하세요,PHP。"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"안녕하세요"</span></span><span>;
</span><span><span class="hljs-variable">$pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strrpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-string">"UTF-8"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$pos</span></span><span>; </span><span><span class="hljs-comment">// 산출 6(두 번째를 나타냅니다“안녕하세요”멀티 바이트 아래의 문자 오프셋 위치)</span></span><span>
</span></span>참고 :이 문자열을 처리하기 위해 STRRRPOS ()를 사용하면 문자 세트 문제로 인해 잘못된 결과 또는 차량 코드가 발생할 수 있습니다. 따라서 중국어를 처리 할 때 인코딩을 명시 적으로 지정해야합니다.
| 기능 | Multibyte가 지원됩니까? | 권장 시나리오 |
|---|---|---|
| strrpos () | 아니요 | 단일 바이트 문자열 (예 : ASCII) |
| iconv_strrpos () | 예 | 다중 바이트 스트링 (예 : UTF-8, GBK) |
UTF-8 인코딩 된 컨텐츠 (예 : 웹 사이트의 다국어 페이지)를 처리하는 경우 ICONV_STRRRPOS ()를 사용하여 부적절한 문자 경계로 인해 문제를 피하는 것이 좋습니다.
문자 세트를 지정하는 것이 중요합니다 . $ charset을 명시 적으로 지정하지 않으면 PHP는 기본 Iconv.internal_encoding을 사용합니다. 이는 실제로 사용중인 문자열 인코딩과 일치하지 않을 수 있습니다.
ICONV 확장자가 활성화되어 있는지 확인하십시오 .이 기능은 ICONV 확장자이며 일반적으로 기본적으로 PHP로 활성화되지만 일부 사용자 정의 환경에서 수동으로 활성화해야 할 수도 있습니다.
위치는 바이트 오프셋이 아닌 문자 오프셋을 반환합니다 . 이것은 다중 바이트 인코딩에서 매우 중요합니다. 그렇지 않으면 후속 문자열 차단 또는 처리 중에 혼동하기 쉽습니다.
iconv_strrpos () 는 멀티 바이트 문자열을 다룰 때 매우 실용적인 기능입니다. 문자 경계를 올바르게 식별하고 개발자가 하위 문자열의 위치를 정확하게 찾는 데 도움이 될 수 있습니다. 특히 중국어 또는 다른 비 ASCII 캐릭터를 다룰 때이 기능을 올바르게 사용하면 프로그램의 안정성과 국제적 호환성을 크게 향상시킬 수 있습니다.
UTF-8 인코딩 된 컨텐츠에 직면 할 때마다 strrpos () 대신 iconv_strrpos ()를 사용하고 불필요한 문제를 피하기 위해 문자 세트를 명시 적으로 지정하는 것이 좋습니다.