PHP의 idn_to_ascii() 함수는 유니코드 도메인 이름을 IDNA ASCII 형식으로 변환하는 데 사용됩니다. IDNA는 'Internationalizing Domain Names in Applications(응용 프로그램 국제화 도메인 이름)'의 약자로, 비ASCII(non-ASCII) 문자를 포함하는 국제화 도메인 이름을 처리하기 위한 메커니즘입니다.
예를 들어 한글이나 움라우트(ä)처럼 특수 문자가 포함된 도메인은 DNS가 직접 인식할 수 없기 때문에, 이 함수를 통해 'xn--'로 시작하는 퓨니코드(Punycode) 형태의 ASCII 문자열로 변환해야 합니다.
문법
string idn_to_ascii( str $domain, integer $flags=IDNA_DEFAULT, integer $variant=INTL_IDNA_VARIANT_UTS46, arr &$idna_info=null )
매개변수
idn_to_ascii() 함수는 다음 네 가지 매개변수를 받습니다.
$domain − 변환할 도메인 이름입니다. 반드시 UTF-8로 인코딩되어 있어야 합니다.
$flags − IDNA_* 상수들을 조합하여 지정하는 옵션 플래그입니다.
$variant − IDNA 2003 표준을 사용하려면 INTL_IDNA_VARIANT_2003을, UTS#46 표준을 사용하려면 INTL_IDNA_VARIANT_UTS46을 지정합니다.
$idna_info − $variant 매개변수에 INTL_IDNA_VARIANT_UTS46을 사용한 경우에만 결과 정보가 채워지는 배열입니다.
반환 값
이 함수는 성공 시 ASCII 호환 형식으로 인코딩된 도메인 이름을 반환하며, 실패하면 False를 반환합니다.
예제 1
<?php
// String domain
print idn_to_ascii('täst.de',0);
?>출력 결과
xn--tst-qla.de
예제 2
<?php
// encoded string ISO-8859-2
echo idn_to_ascii(utf8_encode('täst.de'));
// It cannot convert a domain name to ASCII
// that contains non-ASCII chars but
// it already start with "xn--"
$ascii = idn_to_ascii("xn--".chr(0xC3).chr(0xA4));
print_r($ascii);
?>출력 결과
xn--tst-fea82a.de
참고 사항
두 번째 예제에서 볼 수 있듯이, 이미 'xn--' 접두사로 시작하는 문자열에 비ASCII 문자가 포함되어 있으면 유효한 도메인으로 변환되지 않습니다. 또한 PHP 7.4부터 INTL_IDNA_VARIANT_2003 방식은 더 이상 사용되지 않으므로(deprecated), 기본값인 UTS#46 방식을 사용하는 것이 권장됩니다.