MB_STRCUT 는 멀티 바이트 스트링을 다룰 때 PHP에서 매우 실용적인 기능입니다. 주요 기능은 멀티 바이트 문자열에서 바이트별로 하위 문자를 가로 채는 것입니다. 그러나 문자열에 이모티콘과 같은 특수 문자가 포함 된 경우 MB_STRCUT를 사용하려면 추가 관리가 필요합니다.
mb_strcut (String $ string, int $ start,? int $ longth = null,? String $ encoding = null) : String
이 함수는 바이트 오프셋을 기반으로 문자열을 가로 채 웁니다 (문자 오프셋이 아닌).
MB_SUBSTR 과 달리 MB_STRCUT 는 실제로 "바이트-안전"버전이지만, 일부 다중 반점 문자 (예 : 이모티콘)가 끊어지면 완전한 문자보다는 직접 자릅니다.
예를 살펴 보겠습니다.
<code> $ str = "안녕하세요 ?? world!"; $ cut = mb_strcut ($ str, 0, 9, 'utf-8'); echo $ 컷; </코드>출력이 인사를 기대할 수 있습니까 ?? , 그러나 당신은 실제로 깨진 끈을 볼 수 있고, 심지어 갈라 졌을 수도 있습니다. 이건 왜냐하면 ?? UTF-8 인코딩 하에서 4 바이트 문자이며, MB_Strcut는 중간 바이트에서 잘릴 수 있습니다.
이모티콘은 일반적으로 4 바이트 이상입니다 (예 : 화합물 이모티콘, 예 : ??????????). 문자 경계를 고려하지 않고 바이트로만 자르면 다음과 같이 나타날 수 있습니다.
출력에는 불법 문자가 포함되어 있습니다.
브라우저는 차량 코드 또는 물음표로 표시됩니다.
데이터베이스는 오류를보고 할 수 있습니다 (특히 엄격한 모드).
JSON 인코딩이 실패 할 수 있습니다.
목표가 이모티콘 (Weibo, 댓글 등과 같은 내용 요약 등)으로 텍스트 미리보기를 표시하는 것이 목표라면 다음 방법을 고려할 수 있습니다.
"문자"를 가로 채지 않는다면 MB_SUBSTR을 사용할 수있어 문자 경계가 깨지지 않도록합니다.
<code> $ str = "안녕하세요 ?? world!"; $ preview = mb_substr ($ str, 0, 7, 'utf-8'); Echo $ 미리보기; </코드>이것은 깨진 바이트가 아니라 완전한 문자를 출력합니다.
MB_Strcut (예 : 바이트 수를 제어하기 위해) 사용을 고집하는 경우 잘린 후 불완전한 문자를 정기적으로 제거 할 수 있습니다.
<code> $ str = "안녕하세요 ?? world!"; $ cut = mb_strcut ($ str, 0, 9, 'utf-8'); // 불법 문자를 정기적으로 청소하십시오
$ clean = preg_replace ( '/[\ xc0- \ xff] [\ x80- \ xbf]*$/', '', $ cut);
echo $ clean;
</코드>
이 코드는 끝에 잘릴 수있는 불완전한 멀티 바이트 문자를 제거하려고 시도합니다.
PHP의 INTL 확장자는 복잡한 멀티 바이트 문자를 처리하는 데 적합한 문자 경계 감지를 제공합니다.
<code> $ str = "안녕하세요 ?? world!"; $ breakiterator = intlbreakiterator :: createCharacterInstance ( 'en'); $ breakiterator-> settext ($ str); $ bytes = 0;
$ 한도 = 9;
$ pos = 0;
foreach ($ breakiterator as $ boundary) {
$ chunk = mb_substr ($ str, $ pos, $ boundary- $ pos, 'utf -8');
$ chunkbytes = strlen ($ chunk);
if ($ bytes + $ chunkbytes> $ limit) {
부서지다;
}
$ bytes += $ chunkbytes;
$ pos = $ 경계;
}
$ preview = mb_substr ($ str, 0, $ pos, 'utf-8');
Echo $ 미리보기;
</코드>
이를 통해 인터셉트 문자열은 여전히 바이트 한도 하에서 문자로 가득 차 있으며 국제화 프로젝트 또는 복잡한 텍스트 처리에 적합합니다.
문자열에 이모티콘 또는 기타 멀티 바이트 문자가 포함 된 경우 MB_Strcut을 사용하여 문자열을 가로 채려면 특별한주의가 필요합니다.
그것은 이모티콘을 파괴 할 수있는 바이트에 의해 가로 채 웁니다.
잘린 후 불법 문자를 청소하거나 정기적으로 수리해야합니다.
mb_substr를 사용하는 것은 더 안전하지만 바이트를 정확하게 제어하지는 않습니다.
intlbreakiterator를 사용하여 잘린 위치가 합법적인지 확인하는 것이 좋습니다.
사용자 인터페이스, 데이터베이스 스토리지, 인터페이스 출력 등의 이모티콘 처리의 무결성과 호환성을 테스트하여 차량 코드 또는 데이터 예외의 문제를 피하십시오.
문자 처리에 대한 자세한 모범 사례는 문서를 참조하거나 https://gitbox.net/dev/mbstring을 방문하십시오.