Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 ASCII를 UTF-8 인코딩으로 변환하는 방법

현재 문자열의 인코딩이 ASCII임을 알고 있다면, PHP의 iconv 함수를 사용하여 간단하게 UTF-8로 변환할 수 있습니다. 원본 문자열을 iconv 함수의 매개변수로 전달하면 지정한 인코딩(UTF-8)으로 변환된 결과를 얻을 수 있습니다.

iconv 함수를 사용한 변환 예제

<?php
    $str = "ábrêcWtë";
    echo 'Original :', ("$str"), PHP_EOL;
    echo 'Plain :', iconv("UTF-8", "ISO-8859-1", $str), PHP_EOL;
?>

위 코드에서는 특수 문자가 포함된 문자열이 $str 변수에 할당됩니다. 그런 다음 이 문자열이 iconv() 함수에 전달되는데, 이 함수는 첫 번째 매개변수로 현재 인코딩, 두 번째 매개변수로 변환할 대상 인코딩, 세 번째 매개변수로 변환할 문자열을 받습니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

Original :ábrêcWtë Plain :brcWt

출력에서 볼 수 있듯이, ISO-8859-1에서 표현할 수 없는 일부 특수 문자는 물음표(?)나 깨진 문자로 표시됩니다. 이는 대상 인코딩이 해당 문자를 지원하지 않기 때문입니다.

mb_convert_encoding 함수를 사용한 변환 예제

또 다른 방법은 먼저 문자열의 인코딩을 자동으로 감지한 후, 적절한 인코딩으로 변환하는 것입니다. 이 경우 mb_detect_encoding()mb_convert_encoding() 함수를 함께 사용합니다.

$string = "ábrêcWtë";
print(mb_detect_encoding($string));
$string = mb_convert_encoding($string, "UTF-8");
print(mb_detect_encoding($string));

특수 문자가 포함된 문자열 값이 $string 변수에 할당됩니다. 처음 mb_detect_encoding() 호출로 변환 전 인코딩을 확인하고, 이어서 mb_convert_encoding() 함수를 통해 문자열을 대상 인코딩인 UTF-8로 변환한 뒤 다시 한번 인코딩을 확인합니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

UTF-8UTF-8

두 방식 모두 멀티바이트 문자열 처리에 유용하지만, iconv는 libiconv 라이브러리 기반으로 동작하고, mb_* 계열 함수는 PHP의 mbstring 확장 모듈을 필요로 한다는 점을 참고하면 좋습니다. 실무에서는 인코딩을 사전에 정확히 알 수 없는 경우가 많으므로, mb_detect_encoding()으로 인코딩을 확인한 후 mb_convert_encoding()으로 변환하는 방식이 더 안전하게 활용될 수 있습니다.