현재 위치: > 최신 기사 목록> MB_Strcut의 바이트 및 문자 문제, 알아야 할 차이

MB_Strcut의 바이트 및 문자 문제, 알아야 할 차이

gitbox 2025-05-26

PHP 개발에서 멀티 바이트 스트링 처리는 일반적이고 오류가 발생하기 쉬운 링크입니다. 특히 문자열을 가로 채는 것과 관련하여 MB_STRCUT 함수는 종종 멀티 파이트 문자를 가로 채울 때 차량 문제를 피하기 위해 기판 대신 사용됩니다. 그러나 많은 개발자들은 MB_Strcut 의 바이트와 문자의 차이에 대해 의문을 가지고 있습니다. 이 기사에서는 기능을 더 잘 이해하고 사용하는 데 도움이되는 두 가지 세부 간의 차이점을 분석합니다.

1. MB_STRCUT 기능 소개

MB_STRCUT는 문자열의 일부를 가로 채는 데 사용되는 PHP Multibyte String 함수 라이브러리 MBString 의 함수입니다.

 string mb_strcut ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
  • $ str : 문자열을 입력하십시오

  • $ 시작 : 시작 위치, 유닛은 바이트 (바이트)입니다.

  • $ 길이 : 길이를 가로 채면 장치도 바이트입니다 (선택 사항)

  • $ 인코딩 : 문자열 인코딩, 내부 인코딩으로의 기본값

2. 바이트와 문자의 차이

  • 바이트 : 컴퓨터의 기본 데이터 저장 장치, 1 바이트 = 8 비트. 바이트는 영어 문자를 나타낼 수 있지만 한자 또는 기타 다중 바이트 문자의 경우 여러 바이트가 종종 필요합니다.

  • 문자 : 얼마나 많은 바이트가 차지하는지에 관계없이 완전한 "기호"를 나타냅니다.

예를 들어, UTF-8 인코딩에서 중국어는 일반적으로 3 바이트를 차지하는 반면 영어 문자는 1 바이트를 차지합니다.

3. MB_STRCUT 인터셉트 바이트

MB_STRCUT 의 핵심 사항은 $ 시작$ 길이 매개 변수가 바이트로 이루어지며, 이는 다른 함수 (예 : MB_SUBSTR )와 다르다는 것입니다.

즉, 세 번째 문자에서 시작하여 5자를 가로 채려면 MB_Strcut를 사용하려면 각 문자가 차지하는 바이트 수를 계산해야합니다. 문자 인덱싱을 직접 사용하면 가로 채기 오류로 이어지고 멀티 바이트 캐릭터의 절반을 가로 채어 코드가 발생합니다.

4. 왜 mb_strcut를 사용합니까?

MB_Strcut 의 장점은 다중 바이트 문자의 중간 부분이 잘리지 않도록하는 것입니다. 가로 채기에 MB_STRCUT는 문자의 일부를 자르지 않고 거대한 코드가 출력되는 것을 방지하기 위해 경계를 자동으로 조정합니다.

예를 들어:

 <?php
$str = "안녕하세요,world!"; // "안녕하세요"두 중국어,영어 및 느낌표가 따릅니다
echo mb_strcut($str, 0, 6, "UTF-8"); 
?>

위의 코드에서 6 바이트 길이는 정확히 두 중국어 "You"및 "Good"(한자 당 3 바이트)의 바이트 수입니다. MB_Strcut는 캐릭터의 절반을 잘라 내지 않고이 두 중국어를 올바르게 차단합니다.

문자에서 substr 또는 인터셉트 함수를 사용하는 경우 바이트가 잘린 코드를 일으키기 위해 잘라낼 수 있습니다.

5. 바이트 단위의 계산 예

MB_STRCUT 의 바이트 단위를 이해 한 후 MB_StrlenMB_Substr를 사용하여 바이트 수를 계산하는 데 도움이 될 수 있습니다. 예를 들어:

 <?php
$str = "안녕하세요,world!";
$encoding = "UTF-8";
for ($i = 0; $i < mb_strlen($str, $encoding); $i++) {
    $char = mb_substr($str, $i, 1, $encoding);
    $byteLen = strlen(mb_convert_encoding($char, "UTF-8", $encoding));
    echo "성격 {$char} 점유 된 바이트 수: {$byteLen}\n";
}
?>

산출:

 성격 너 점유 된 바이트 수: 3
성격 좋은 점유 된 바이트 수: 3
성격 , 점유 된 바이트 수: 3
성격 w 점유 된 바이트 수: 1
성격 o 점유 된 바이트 수: 1
성격 r 점유 된 바이트 수: 1
성격 l 점유 된 바이트 수: 1
성격 d 점유 된 바이트 수: 1
성격 ! 점유 된 바이트 수: 3

이는 멀티 바이트 문자가 UTF-8에서 여러 바이트를 차지하고 있음을 나타냅니다.

6. MB_STRCUT 또는 MB_SUBSTR를 선택 하시겠습니까?

  • 바이트 길이를 기준으로 문자열을 자르고 중간에 다중 바이트 문자가 잘리지 않으면 MB_Strcut을 사용해야합니다.

  • 문자 수 에 따라 문자열을 가로 채려면 (각 문자가 취하는 바이트 수에 관계없이) MB_SUBSTR을 사용해야합니다.

7. 주목할만한 것들

  • 올바른 인코딩을 지정하십시오. 그렇지 않으면 바이트 계산이 오류 일 수 있습니다.

  • 네트워크 전송, 데이터베이스 스토리지 또는 파일 운영에서 문자열의 바이트 길이는 종종 문자 길이보다 중요하며 MB_Strcut은 현재 매우 실용적입니다.

  • 바이트와 ​​문자의 차이에 익숙하지 않은 경우, 잘린 코드 문제와 차별화 된 코드 문제가 발생하기 쉽습니다.


 <?php
// 샘플 코드:사용mb_strcut인터셉트UTF-8编码성격串的前6바이트(对应두 중국어)
$str = "안녕하세요,world!";
$cutStr = mb_strcut($str, 0, 6, "UTF-8");
echo $cutStr; // 산출 "안녕하세요"
?>