• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • idn_to_ascii()

    (PHP 5 >= 5.3.0, PHP 7, PECL intl >= 1.0.2, PECL idn >= 0.1)

    Convert domain name to IDNA ASCII form

    说明

    过程化风格
    idn_to_ascii(string $domain[,int $options= IDNA_DEFAULT[,int $variant= INTL_IDNA_VARIANT_UTS46[,array &$idna_info]]]): string

    This function converts a Unicode domain name to an IDNA ASCII-compatible format.

    参数

    $domain

    The domain to convert, which must be UTF-8 encoded.

    $options

    Conversion options - combination of IDNA_* constants(except IDNA_ERROR_* constants).

    $variant

    Either INTL_IDNA_VARIANT_2003(deprecated as of PHP 7.2.0)for IDNA 2003 or INTL_IDNA_VARIANT_UTS46(only available as of ICU 4.6)for UTS #46.

    $idna_info

    This parameter can be used only if INTL_IDNA_VARIANT_UTS46 was used for$variant. In that case, it will be filled with an array with the keys'result', the possibly illegal result of the transformation,'isTransitionalDifferent', a boolean indicating whether the usage of the transitional mechanisms of UTS #46 either has or would have changed the result and'errors', which is an int representing a bitset of the error constants IDNA_ERROR_*.

    返回值

    The domain name encoded in ASCII-compatible form,或者在失败时返回FALSE

    更新日志

    版本说明
    7.4.0 The default value of$variantis now INTL_IDNA_VARIANT_UTS46 instead of the deprecated INTL_IDNA_VARIANT_2003.
    7.2.0INTL_IDNA_VARIANT_2003 has been deprecated; use INTL_IDNA_VARIANT_UTS46 instead.
    5.4.0/PECL 2.0.0b1 Added the parameters$variantand$idna_info; UTS #46 support(requires ICU ≥ 4.6).

    范例

    idn_to_ascii() example

    <?php
    echo idn_to_ascii('täst.de'); 
    ?>
    

    以上例程会输出:

    xn--tst-qla.de
    

    参见

    The notes on this function are not very clear and a little misleading.
    Firstly, <=5.3, you will need to make use of one of several scripts or classes available on the internet which might, or might not, require the installation of of the intl and idn PECL extensions ...and you will need to have !<4.0 in order to be able to install both.
    Secondly, if you have >=5.4 you will not require the PECL extensions.
    Third, use of utf8_encode() is not necessary. In fact, it will potentially prevent idn_to_ascii() from working at all.
    On my setup it was necessary to change the charset in the script meta tags to UTF-8:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    ...and to change charset_default in the php.ini file (/usr/local/lib/php.ini, whereis php.ini, find / -name php.ini):
    default_charset = "UTF-8"
    The above changes mean that idn_to_ascii() can now be used with that syntax (no need for utf8_encode()). Previously, the function worked to convert some IDNs, but failed to convert Japanese and Cyrillic IDNs. Further, no additional locales were enabled or added, and Apache's charset file was left unmodified.
    It is also important to remember only to apply the function where required, eg:
    idn_to_ascii(cåsino.com) // is wrong
    ...whereas...
    iden_to_ascii(cåsino) // is right
    ...and also be aware of text editors that don't support UTF-8 encoding, or the $domain = 'cåsino' value will end up as $domain = '??????' ...and the function will fail.
    I have found that Notepad++ easily and reliably handles UTF-8 encoding that works for this function using UTF-8 as the encoding option, not UTF-8 without BOM.
    To convert IDN Domains with the IDNA2008 definition use following command.
    idn_to_ascii('teßt.com',IDNA_NONTRANSITIONAL_TO_ASCII,INTL_IDNA_VARIANT_UTS46)
    The result is then as expected
    xn--tet-6ka.com

    下篇:idn_to_utf8()