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

PHP idn_to_ascii() 함수 – 유니코드 도메인을 IDNA ASCII로 변환하기

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로 인코딩되어 있어야 합니다.

  • $flagsIDNA_* 상수들을 조합하여 지정하는 옵션 플래그입니다.

  • $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&auml;st.de',0);
?>

출력 결과

xn--tst-qla.de

예제 2

<?php
   // encoded string ISO-8859-2
   echo idn_to_ascii(utf8_encode('t&auml;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 방식을 사용하는 것이 권장됩니다.