>백엔드 개발 >PHP 튜토리얼 >`preg_match()` 이전의 멀티바이트 문자 수를 올바르게 가져오는 방법은 무엇입니까?

`preg_match()` 이전의 멀티바이트 문자 수를 올바르게 가져오는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-08 09:11:15760검색

How to Correctly Get Multibyte Character Count Before a `preg_match()`?

preg_match()를 사용하여 일치 전 멀티바이트 문자 수 가져오기(PREG_OFFSET_CAPTURE 매개변수는 바이트 계산에 도움이 되지 않음)

UTF-8로 인코딩된 문자열에서 preg_match ()는 PREG_OFFSET_CAPTURE를 사용할 때 캡처된 일치 내에서 잘못된 문자 오프셋을 보고할 수 있습니다. 매개변수. 그 이유는 제목 문자열이 "u" 수정자를 사용하여 UTF-8로 해석되는 경우에도 캡처된 오프셋이 바이트 단위로 계산되기 때문입니다.

해결책:

UTF-8로 캡처된 일치 항목 내에서 올바른 문자 오프셋을 얻으려면 mb_strlen을 사용하여 UTF-8 바이트를 기준으로 문자 수를 계산하세요. 오프셋:

$str = "\xC2\xA1Hola!";
preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);
echo mb_strlen(substr($str, 0, $a_matches[0][1]));

위 내용은 `preg_match()` 이전의 멀티바이트 문자 수를 올바르게 가져오는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.