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

PHP iconv() 함수로 문자열을 원하는 문자 인코딩으로 변환하는 방법

PHP에서 iconv() 함수는 문자열을 요청된 문자 인코딩으로 변환할 때 사용됩니다. 즉, 지정한 입력 인코딩(from_encoding)에서 출력 인코딩(to_encoding)으로 문자셋(charset) 변환을 수행하는 역할을 합니다.

구문

string iconv(string $from_encoding, string $to_encoding, string $string)

매개변수

iconv() 함수는 다음 세 가지 매개변수를 받습니다.

  • $from_encoding − 입력 문자셋(input charset)을 지정합니다.

  • $to_encoding − 출력 문자셋(output charset)을 지정합니다.

  • $string − 변환 대상이 되는 문자열입니다.

//TRANSLIT과 //IGNORE 옵션

출력 인코딩 뒤에 특수 접미사를 붙이면 변환 동작을 세밀하게 제어할 수 있습니다.

  • //TRANSLIT − 대상 인코딩에 해당 문자가 없을 경우, 비슷한 문자로 치환(음역)합니다. 예를 들어 유로 기호(€)가 지원되지 않으면 "EUR"로 바뀔 수 있습니다.

  • //IGNORE − 변환할 수 없는 문자를 조용히 버리고 나머지 문자열만 반환합니다.

반환 값

iconv()는 성공 시 변환된 문자열을 반환하고, 실패 시 false를 반환합니다.

예제 1: 변환이 가능한 경우

달러 기호($)는 ISO-8859-1에 포함되어 있으므로 문제없이 변환됩니다.

<?php
    // 달러 기호($)가 포함된 문자열
    $text = "the Dollar symbol '$'";

    echo 'Original : ', $text, PHP_EOL;
    echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
    echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
?>

실행 결과

Original : the Dollar symbol '$'
TRANSLIT : the Dollar symbol '$'
IGNORE   : the Dollar symbol '$'

예제 2: 변환이 불가능한 문자가 있는 경우

인도 루피 기호(₹)는 ISO-8859-1에 존재하지 않습니다. 이때 두 옵션의 차이가 드러납니다.

<?php
    // ISO-8859-1에 없는 루피 기호(₹)가 포함된 문자열
    $string = "Indian Rupees '₹'";

    echo 'Original : ', $string, PHP_EOL;
    echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL;
    echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL;
?>

실행 결과

Original : Indian Rupees '₹'
TRANSLIT : Indian Rupees 'Rs.'
IGNORE   : Indian Rupees ''

위 결과에서 볼 수 있듯이 //TRANSLIT은 루피 기호를 "Rs."로 음역해 최대한 의미를 보존하는 반면, //IGNORE은 해당 문자를 그대로 제거합니다. 상황에 맞게 적절한 옵션을 선택하면 인코딩 불일치로 인한 데이터 손실이나 오류를 효과적으로 방지할 수 있습니다.