현재 위치: > 최신 기사 목록> 문자열 길이 감지를 위해 mb_get_info를 mb_strlen과 결합하는 방법

문자열 길이 감지를 위해 mb_get_info를 mb_strlen과 결합하는 방법

gitbox 2025-05-11

PHP에서 멀티 바이트 스트링 (예 : 중국어, 일본어, 한국 등)을 처리 할 때 표준 문자열 함수 (예 : Strlen )를 사용하면 예상치 못한 결과가 발생합니다. 이러한 기능은 문자가 아닌 바이트로 계산되기 때문입니다. 현재보다 정확한 문자열 작업을 달성하려면 MB_STRLENMB_GET_INFO 와 같은 PHP의 Multibyte String Extension (MBString)에서 기능을 사용해야합니다.

이 기사에서는 MB_StrlenMB_GET_INFO 의 기본 사용을 안내하고 예제를 사용하여 멀티 바이트 문자열의 길이를 정확하게 감지하는 데 어떻게 도움이되는지 설명합니다.

1. 왜 직접 사용할 수 없습니까 ?

간단한 예를 살펴 보겠습니다.

 $str = "안녕하세요,세계";
echo strlen($str);  // 산출:15

이 문자열에는 중국어가 5 명 (쉼표 포함)이 있지만 15를 반환합니다. 이는 UTF-8 인코딩에서 중국어가 대개 3 바이트를 차지하기 때문입니다. Strlen은 "문자 번호"가 아닌 "Byte Number"를 계산합니다.

실제 문자 수를 얻으려면 mb_strlen을 사용해야합니다.

 echo mb_strlen($str);  // 산출:5

이런 식으로 우리는 올바른 수의 문자를 얻습니다.

2. MB_STRLEN을 사용하여 문자 길이를 정확하게 계산하십시오

MB_STRLEN 은 다중 바이트 문자를 위해 특별히 설계된 기능이며 구문은 다음과 같습니다.

 int mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
  • $ str : 길이를 측정하는 문자열입니다

  • $ 인코딩 : 선택 사항, 인코딩 유형을 지정하고 기본값을 사용하여 mb_internal_encoding ()에 의해 반환 된 인코딩을 사용합니다.

예:

 $str = "방문에 오신 것을 환영합니다 https://gitbox.net";
$length = mb_strlen($str, 'UTF-8');
echo "문자 길이는입니다:$length";

산출:

 문자 길이는입니다:18

이것은 바이트 수가 아닌 혼합 중국어와 영어 문자열에서 "문자 수"를 올바르게 계산합니다.

3. 인코딩 정보를 얻기 위해 MB_GET_INFO를 사용하는 방법은 무엇입니까?

MB_GET_INFO는 현재 MBString 구성, 특히 내부 인코딩 방법을 이해하는 데 도움이 될 수 있습니다.

 $info = mb_get_info();
print_r($info);

출력 예 :

 Array
(
    [internal_encoding] => UTF-8
    [http_input] => pass
    [http_output] => pass
    [language] => neutral
    [encoding_translation] => 0
    ...
)

이것은 UTF-8 인코딩이 현재 사용되고 있음을 알려줍니다. MB_STRLEN 계산 결과가 부정확하다는 것을 알게되면 내부 인코딩이 올바르게 설정되어 있는지 확인하는 것이 도움이됩니다.

특정 정보를 반환하도록 지정할 수도 있습니다.

 echo mb_get_info("internal_encoding");  // 산출:UTF-8

4. 제안 : 기본 인코딩을 설정하십시오

문제를 피하려면 스크립트 시작시 기본 멀티 바이트 인코딩을 설정하는 것이 좋습니다.

 mb_internal_encoding("UTF-8");

이를 통해 MB_STRLEN , MB_SUBSTR 및 기타 함수와 같은 함수는 문자열을 처리하기 위해 UTF-8로 인코딩하도록합니다.