You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
<?php |
|
|
|
/* |
|
* This file is part of the Symfony package. |
|
* |
|
* (c) Fabien Potencier <fabien@symfony.com> |
|
* |
|
* For the full copyright and license information, please view the LICENSE |
|
* file that was distributed with this source code. |
|
*/ |
|
|
|
namespace Symfony\Component\Mime\Encoder; |
|
|
|
/** |
|
* An IDN email address encoder. |
|
* |
|
* Encodes the domain part of an address using IDN. This is compatible will all |
|
* SMTP servers. |
|
* |
|
* Note: It leaves the local part as is. In case there are non-ASCII characters |
|
* in the local part then it depends on the SMTP Server if this is supported. |
|
* |
|
* @author Christian Schmidt |
|
*/ |
|
final class IdnAddressEncoder implements AddressEncoderInterface |
|
{ |
|
/** |
|
* Encodes the domain part of an address using IDN. |
|
*/ |
|
public function encodeString(string $address): string |
|
{ |
|
$i = strrpos($address, '@'); |
|
if (false !== $i) { |
|
$local = substr($address, 0, $i); |
|
$domain = substr($address, $i + 1); |
|
|
|
if (preg_match('/[^\x00-\x7F]/', $domain)) { |
|
$address = sprintf('%s@%s', $local, idn_to_ascii($domain, \IDNA_DEFAULT | \IDNA_USE_STD3_RULES | \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_NONTRANSITIONAL_TO_ASCII, \INTL_IDNA_VARIANT_UTS46)); |
|
} |
|
} |
|
|
|
return $address; |
|
} |
|
}
|
|
|