/** * Converts domain part of the address to punycode if needed. * * @param string $address The address that should be normalized. * @return string */ private static function normalizeAddress($address) { $chunks = explode('@', $address); if (count($chunks) < 2) { // The address has no "@" character thus it's not a real email // address and should not be normalized at all. return $address; } $punycode = new Punycode(); // Domain part should be converted to punycode to play nice with IDN. $domain = $punycode->encode(array_pop($chunks)); // Local part should be left as is. $local_part = implode('@', $chunks); return $local_part . '@' . $domain; }
/** * Encode an internationalized domain name * * @param string $strDomain The domain name * * @return string The encoded domain name */ public static function encode($strDomain) { $objPunycode = new Punycode(); return $objPunycode->encode($strDomain); }
protected function isValidHostPattern(array $data) { $data = explode($this->delimiter, $this->punycode->encode(implode($this->delimiter, $data))); $res = preg_grep('/^[0-9a-z]([0-9a-z-]{0,61}[0-9a-z])?$/i', $data, PREG_GREP_INVERT); return 0 == count($res); }
/** Возвратить адрес как строку */ public function asString($absolute = false) { $url = '/'; if ($absolute) { $puny = new Punycode(); $url = $this->getScheme() . '://' . $puny->encode($this->getHost()) . '/'; } if ($a = $this->getArguments()) { foreach ($this->getArguments() as $str) { $url .= urlencode($str) . '/'; } } $url .= $this->buildParams(); if ($fn = $this->getFileName(true)) { $url .= urlencode($fn); } return $url; }
/** * Encode an internationalized domain name * * @param string $domain The domain name * @return string The encoded domain name */ protected function encode($domain) { $objPunycode = new Punycode(); return $objPunycode->encode($domain); }