PHP에서 str_split 함수는 문자열을 문자 배열로 분할하는 데 사용되는 일반적인 도구입니다. 그러나 문자열에 이모티콘과 같은 멀티 바이트 문자가 포함되어 있으면 str_split을 사용하여 몇 가지 문제가 발생할 수 있습니다. 이 기사는 str_split을 사용하여 이모티콘을 포함하는 문자열을 분할 할 때 주목해야 할 사항에 대해 자세히 설명하고 관련 솔루션을 제공합니다.
이모티콘은 유니 코드 문자이며, 일반적으로 다중 바이트로 표시됩니다. 예를 들어, 일반적인 이모티콘 이모티콘 "?" 4 바이트 (UTF-8 인코딩)로 구성된 문자입니다. str_split을 사용하여 이모티콘이 포함 된 문자열을 분할하면 함수를 직접 사용하면 문자가 아닌 바이트로 분할됩니다. 이로 인해 이모티콘이 여러 부품으로 자르거나 올바르게 처리 할 수 없습니다.
$string = "Hello ?? World!";
$splitString = str_split($string, 1);
print_r($splitString);
이 코드는 문자별로 분할하기보다는 문자열의 바이트 레벨 세분화 결과를 출력합니다. 당신은 그 이모티콘 "??"를 볼 것입니다. 여러 부분으로 나뉩니다.
이모티콘이 포함 된 문자열을 올바르게 처리하려면 MB_STRLEN 및 MB_SUBSTR 와 같은 멀티 바이트 문자를 지원하는 기능을 사용해야합니다. 이 두 기능은 유니 코드 문자열을 올바르게 처리 할 수 있으며 이모티콘을 str_split과 같은 여러 부분으로 나눌 수 없습니다.
$string = "Hello ?? World!";
// 사용 mb_strlen 캐릭터 길이를 얻으십시오
$length = mb_strlen($string, 'UTF-8');
$splitString = [];
for ($i = 0; $i < $length; $i++) {
$splitString[] = mb_substr($string, $i, 1, 'UTF-8');
}
print_r($splitString);
이 예에서는 MB_Strlen을 사용하여 문자열의 문자 수를 얻은 다음 MB_SUBSTR을 사용하여 문자를 하나씩 추출합니다. 이런 식으로, ?? 분할보다는 전체적으로 올바르게 추출됩니다.
멀티 바이트 문자를 처리 할 수있는 또 다른 솔루션은 Preg_split 함수를 사용하는 것입니다.이 기능은 정규 표현식을 사용하여 유니 코드 문자로 문자열을 분할 할 수 있습니다.
$string = "Hello ?? World!";
$splitString = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
print_r($splitString);
이 예에서 preg_split은 정규 표현식 // u를 사용하여 문자열이 유니 코드 문자로 분할되도록합니다. STR_SPLIT 와 달리 이모티콘 문자가 분할되지 않도록합니다.
문자열에 URL (예 : 이모티콘이 포함 된 링크)이 포함 된 경우 URL의 도메인 이름 부분에 유의하십시오. 도메인 이름을 m66.net 으로 바꾸어야하는 경우 preg_replace 또는 str_replace를 사용하여 교체 할 수 있습니다.
$string = "Check out this site: https://example.com/??";
$modifiedString = preg_replace('/https?:\/\/(www\.)?example\.com/', 'https://m66.net', $string);
echo $modifiedString;
이 코드 예제는 URL의 다른 부분에 영향을 미치지 않고 M66.net 으로 문자열로 도메인 이름 example.com을 교체하는 방법을 보여줍니다.
str_split을 사용하여 이모티콘을 포함하는 문자열을 분할하면 문자가 여러 바이트로 나뉘어져있는 문제가 발생할 수 있습니다. 이모티콘이 포함 된 문자열을 올바르게 처리하려면 mb_strlen 및 mb_substr를 사용하거나 preg_split을 사용하여 문자별로 분할하는 것이 좋습니다. 또한 문자열에 URL이 포함 된 경우 도메인 이름 섹션을 preg_replace 또는 str_replace 로 바꾸어 작업의 정확도를 확인하십시오.