Programming/PHP

PHP 문자열 출력 시 한글 깨지는 경우

고고마코드 2022. 2. 7. 22:53
반응형

개발환경이 PHP 7.4 미만 버전이라 mb_str_split 함수를 사용하지 못하는 경우입니다.
@UTF-8 파일에서 문자열을 순서대로 출력하려고 했는데 한글이 깨지는 오류를 만나 해결하는 과정입니다.


한글 깨지는 오류

$word = "한글테스트";
for ($i=0; $i < strlen($word); $i++) {
    #echo $word[$i]. "<br>";
    echo substr($word, $i, 1). "<br>";
}

substr() 함수를 사용해도, 주석된 코드를 사용해도 모두 한글이 깨집니다.

한글이 포함된 문자열을 순차대로 출력하려고 할 때 가공하지 않고 그대로 출력할 때는 문제가 되지 않습니다.

그러나 문자열에서 출력할 문자가 한글일 경우 해당 문자와 연산을 하려고 하면 한글이 깨지는 현상이 발생합니다.


해결 방법

  • strlen() -> mb_strlen()
    strlen() 함수에서 한글은 1글자를 3글자로 인식합니다. 그래서 위의 출력 결과물의 반복이 의도한 것보다 더 많이 수행되었습니다.
    그러므로 우선 한글이 포함된 문자열에서 정확한 길이를 가져오기 위해서는 mb_strlen() 을 사용합니다.
    PHP: mb_strlen - Manual


  • substr() -> iconv_substr()
      iconv_substr($word, $i, 1, 'utf-8');
    iconv_substr() 함수를 사용해 해당 문자를 utf-8 로 지정할 수 있습니다.
    이 함수를 활용하면 더 이상 한글이 깨지지 않습니다.
    PHP: iconv_substr - Manual

전체 코드(오류 해결한 코드)

$word = "한글테스트";
for ($i=0; $i < strlen($word); $i++) {
    echo iconv_substr($word, $i, 1, 'utf-8'). "<br>";
}

반응형