private function formatRegisteredName(string $host): string
    {
        // @codeCoverageIgnoreStart
        // added because it is not possible in travis to disabled the ext/intl extension
        // see travis issue https://github.com/travis-ci/travis-ci/issues/4701
        static $idn_support = null;
        $idn_support = $idn_support ?? function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46');
        // @codeCoverageIgnoreEnd

        $formatted_host = rawurldecode(strtolower($host));
        if (1 === preg_match(self::REGEXP_HOST_REGNAME, $formatted_host)) {
            if (false === strpos($formatted_host, 'xn--')) {
                return $formatted_host;
            }

            // @codeCoverageIgnoreStart
            if (!$idn_support) {
                throw new IdnSupportMissing(sprintf('the host `%s` could not be processed for IDN. Verify that ext/intl is installed for IDN support and that ICU is at least version 4.6.', $host));
            }
            // @codeCoverageIgnoreEnd

            $unicode = idn_to_utf8(
                $host,
                IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_UNICODE,
                INTL_IDNA_VARIANT_UTS46,
                $arr
            );

            if (0 !== $arr['errors']) {
                throw new SyntaxError(sprintf('The host `%s` is invalid : %s', $host, $this->getIDNAErrors($arr['errors'])));
            }

            // @codeCoverageIgnoreStart
            if (false === $unicode) {
                throw new IdnSupportMissing(sprintf('The Intl extension is misconfigured for %s, please correct this issue before proceeding.', PHP_OS));
            }
            // @codeCoverageIgnoreEnd

            return $formatted_host;
        }

        if (1 === preg_match(self::REGEXP_HOST_GEN_DELIMS, $formatted_host)) {
            throw new SyntaxError(sprintf('The host `%s` is invalid : a registered name can not contain URI delimiters or spaces', $host));
        }

        // @codeCoverageIgnoreStart
        if (!$idn_support) {
            throw new IdnSupportMissing(sprintf('the host `%s` could not be processed for IDN. Verify that ext/intl is installed for IDN support and that ICU is at least version 4.6.', $host));
        }
        // @codeCoverageIgnoreEnd

        $formatted_host = idn_to_ascii(
            $formatted_host,
            IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_ASCII,
            INTL_IDNA_VARIANT_UTS46,
            $arr
        );
        if (0 !== $arr['errors']) {
            throw new SyntaxError(sprintf('The host `%s` is invalid : %s', $host, $this->getIDNAErrors($arr['errors'])));
        }

        // @codeCoverageIgnoreStart
        if (false === $formatted_host) {
            throw new IdnSupportMissing(sprintf('The Intl extension is misconfigured for %s, please correct this issue before proceeding.', PHP_OS));
        }
        // @codeCoverageIgnoreEnd

        return $arr['result'];
    }
private function formatRegisteredName(string $host): string
    {
        // @codeCoverageIgnoreStart
        // added because it is not possible in travis to disabled the ext/intl extension
        // see travis issue https://github.com/travis-ci/travis-ci/issues/4701
        static $idn_support = null;
        $idn_support = $idn_support ?? function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46');
        // @codeCoverageIgnoreEnd

        $formatted_host = rawurldecode(strtolower($host));
        if (1 === preg_match(self::REGEXP_HOST_REGNAME, $formatted_host)) {
            if (false === strpos($formatted_host, 'xn--')) {
                return $formatted_host;
            }

            // @codeCoverageIgnoreStart
            if (!$idn_support) {
                throw new IdnSupportMissing(sprintf('the host `%s` could not be processed for IDN. Verify that ext/intl is installed for IDN support and that ICU is at least version 4.6.', $host));
            }
            // @codeCoverageIgnoreEnd

            $unicode = idn_to_utf8(
                $host,
                IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_UNICODE,
                INTL_IDNA_VARIANT_UTS46,
                $arr
            );

            if (0 !== $arr['errors']) {
                throw new SyntaxError(sprintf('The host `%s` is invalid : %s', $host, $this->getIDNAErrors($arr['errors'])));
            }

            // @codeCoverageIgnoreStart
            if (false === $unicode) {
                throw new IdnSupportMissing(sprintf('The Intl extension is misconfigured for %s, please correct this issue before proceeding.', PHP_OS));
            }
            // @codeCoverageIgnoreEnd

            return $formatted_host;
        }

        if (1 === preg_match(self::REGEXP_HOST_GEN_DELIMS, $formatted_host)) {
            throw new SyntaxError(sprintf('The host `%s` is invalid : a registered name can not contain URI delimiters or spaces', $host));
        }

        // @codeCoverageIgnoreStart
        if (!$idn_support) {
            throw new IdnSupportMissing(sprintf('the host `%s` could not be processed for IDN. Verify that ext/intl is installed for IDN support and that ICU is at least version 4.6.', $host));
        }
        // @codeCoverageIgnoreEnd

        $formatted_host = idn_to_ascii(
            $formatted_host,
            IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_ASCII,
            INTL_IDNA_VARIANT_UTS46,
            $arr
        );
        if (0 !== $arr['errors']) {
            throw new SyntaxError(sprintf('The host `%s` is invalid : %s', $host, $this->getIDNAErrors($arr['errors'])));
        }

        // @codeCoverageIgnoreStart
        if (false === $formatted_host) {
            throw new IdnSupportMissing(sprintf('The Intl extension is misconfigured for %s, please correct this issue before proceeding.', PHP_OS));
        }
        // @codeCoverageIgnoreEnd

        return $arr['result'];
    }
private function formatRegisteredName ( string $ host ) : string { // @codeCoverageIgnoreStart // added because it is not possible in travis to disabled the ext/intl extension // see travis issue https://github.com/travis-ci/travis-ci/issues/4701 static $ idn_support = null ; $ idn_support = $ idn_support ?? function_exists ( 'idn_to_ascii' ) && defined ( 'INTL_IDNA_VARIANT_UTS46' ) ; // @codeCoverageIgnoreEnd $ formatted_host = rawurldecode ( strtolower ( $ host ) ) ; if ( 1 === preg_match ( self :: REGEXP_HOST_REGNAME , $ formatted_host ) ) { if ( false === strpos ( $ formatted_host , 'xn--' ) ) { return $ formatted_host ; } // @codeCoverageIgnoreStart if ( ! $ idn_support ) { throw new IdnSupportMissing ( sprintf ( 'the host `%s` could not be processed for IDN. Verify that ext/intl is installed for IDN support and that ICU is at least version 4.6.' , $ host ) ) ; } // @codeCoverageIgnoreEnd $ unicode = idn_to_utf8 ( $ host , IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_UNICODE , INTL_IDNA_VARIANT_UTS46 , $ arr ) ; if ( 0 !== $ arr [ 'errors' ] ) { throw new SyntaxError ( sprintf ( 'The host `%s` is invalid : %s' , $ host , $ this -> getIDNAErrors ( $ arr [ 'errors' ] ) ) ) ; } // @codeCoverageIgnoreStart if ( false === $ unicode ) { throw new IdnSupportMissing ( sprintf ( 'The Intl extension is misconfigured for %s, please correct this issue before proceeding.' , PHP_OS ) ) ; } // @codeCoverageIgnoreEnd return $ formatted_host ; } if ( 1 === preg_match ( self :: REGEXP_HOST_GEN_DELIMS , $ formatted_host ) ) { throw new SyntaxError ( sprintf ( 'The host `%s` is invalid : a registered name can not contain URI delimiters or spaces' , $ host ) ) ; } // @codeCoverageIgnoreStart if ( ! $ idn_support ) { throw new IdnSupportMissing ( sprintf ( 'the host `%s` could not be processed for IDN. Verify that ext/intl is installed for IDN support and that ICU is at least version 4.6.' , $ host ) ) ; } // @codeCoverageIgnoreEnd $ formatted_host = idn_to_ascii ( $ formatted_host , IDNA_CHECK_BIDI | IDNA_CHECK_CONTEXTJ | IDNA_NONTRANSITIONAL_TO_ASCII , INTL_IDNA_VARIANT_UTS46 , $ arr ) ; if ( 0 !== $ arr [ 'errors' ] ) { throw new SyntaxError ( sprintf ( 'The host `%s` is invalid : %s' , $ host , $ this -> getIDNAErrors ( $ arr [ 'errors' ] ) ) ) ; } // @codeCoverageIgnoreStart if ( false === $ formatted_host ) { throw new IdnSupportMissing ( sprintf ( 'The Intl extension is misconfigured for %s, please correct this issue before proceeding.' , PHP_OS ) ) ; } // @codeCoverageIgnoreEnd return $ arr [ 'result' ] ; }
Validate and format a registered name.

The host is converted to its ascii representation if needed

@throws IdnSupportMissing if the submitted host required missing or misconfigured IDN support
@throws SyntaxError       if the submitted host is not a valid registered name
Validate and format a registered name .