현재 위치: > 최신 기사 목록> Multibyte 문자를 분할 할 때 str_split 트랩

Multibyte 문자를 분할 할 때 str_split 트랩

M66 2025-05-28

php에서 str_split 은 일반적으로 사용되는 문자열 분할 기능으로 문자열을 지정된 길이로 배열로 분할합니다. 그러나 멀티 바이트 캐릭터 (예 : 중국어, 일본어, 한국 등)를 다룰 때 STR_SPLIT는 단일 바이트 문자를 기반으로 설계 되었기 때문에 약간의 함정을 가져올 수 있습니다. 이 기사는 Multibyte 문자를 STR_SPLIT 로 분할 할 때 발생할 수있는 문제에 대해 논의하고 해당 솔루션을 제공합니다.

1. 다중 바이트 문자에 대한 str_split 의 문제

기본적으로 str_split 함수는 주어진 길이에 따라 문자열을 분할합니다. 단일 바이트 문자 (예 : ASCII 문자)의 경우 문제는 없지만 다중 바이트 문자의 경우 문자가 불완전한 바이트 시퀀스 나뉘어 문자의 정확성을 깨뜨릴 수 있습니다.

예를 들어, 다음 문자열 (중국어 포함)이 있다고 가정합니다.

 $str = "안녕하세요,PHP!";
$split = str_split($str, 3);
print_r($split);

위의 코드를 실행할 때, 우리의 기대는 세 문자마다 문자열을 분할 할 것이지만, 각 중국어는 여러 바이트로 구성되므로 str_split은 문자의 중간에서 깨지기 때문에 불완전한 캐릭터와 심지어는 코드가 발생할 수 있습니다.

2. 이러한 함정을 피하는 방법은 무엇입니까?

이러한 문제를 피하기 위해 다음 방법을 고려할 수 있습니다.

mb_str_split 함수를 사용하십시오

PHP는 멀티 바이트 문자 세트 확장 함수 MB_STR_SPLIT를 제공하며, 이는 멀티 파이트 문자를 처리하기에 가장 적합한 선택입니다. MB_STR_SPLIT는 문자열을 바이트가 아닌 문자별로 분할하여 멀티 바이트 문자 분할 문제로 인한 함정을 피합니다.

샘플 코드 :

 $str = "안녕하세요,PHP!";
$split = mb_str_split($str, 3, 'UTF-8');
print_r($split);

이런 식으로 MB_STR_SPLIT는 문자의 실제 너비에 따라 절단되어 각 캐릭터가 잘못 분할되지 않도록합니다.

mb_substr를 사용하여 문자열 분할

MB_STR_SPLIT가 환경 (예 : 낮은 PHP 버전)에 적합하지 않은 경우 MB_SUBSTR을 사용하여 수동으로 문자열을 분할 할 수도 있습니다.

샘플 코드 :

 $str = "안녕하세요,PHP!";
$length = 3;
$chunks = [];
for ($i = 0; $i < mb_strlen($str, 'UTF-8'); $i += $length) {
    $chunks[] = mb_substr($str, $i, $length, 'UTF-8');
}
print_r($chunks);

이 예에서는 MB_SUBSTR을 통해 점차적으로 각 하위 문자열을 얻으므로 다중 바이트 문자가 분할되는 상황을 피합니다.

올바른 문자 인코딩을 설정하십시오

str_split을 계속 사용하기로 결정한 경우 적어도 MB_Internal_encoding 을 사용하여 올바른 문자 인코딩을 설정하십시오. STR_SPLIT 자체는 멀티 바이트 문자의 인코딩 문제를 자동으로 처리하지 않지만 PHP가 올바른 인코딩 (예 : UTF-8)을 사용하도록 보장합니다.

 mb_internal_encoding("UTF-8");
$str = "안녕하세요,PHP!";
$split = str_split($str, 3);
print_r($split);

이것은 다중 바이트 문자 분할의 문제를 완전히 피하지는 않지만, 처리시 캐릭터의 인코딩에 예기치 않은 변환이 없도록합니다.

3. 요약

PHP를 사용하여 멀티 바이트 문자를 처리 할 때 STR_SPLIT 함수가 문자열을 제대로 분할하지 못하여 손상 또는 차량이 발생할 수 있습니다. 이러한 문제를 피하기 위해 MB_STR_SPLIT 또는 MB_SUBSTR 과 같은 멀티 바이트 문자를 구체적으로 다루는 기능을 사용할 수 있습니다. 동시에, 캐릭터 인코딩이 올바르게 설정되도록 보장하는 것도 멀티 바이트 문자를 처리 할 때 좋은 관행입니다.

이러한 방법을 사용하면 멀티 바이트 문자를보다 단단히 처리하여 실제 개발에서 발생하는 트랩을 피할 수 있습니다.