Поиск функции php только для адреса электронной почты obfuscator

Есть ли функция обфускатора только для адреса электронной почты php? Большинство из найденных в Интернете – это сочетание JS и PHP.

Мой любимчик:

Разметка + PHP

<span class="rev"><?php echo strrev($email); ?> </span> 

CSS

 .rev{ direction: rtl; unicode-bidi: bidi-override; } 

скрипка

Вот несколько функций, которые я использую.

Сначала обфускация адреса электронной почты с использованием кодов символов html:

 function getObfuscatedEmailAddress($email) { $alwaysEncode = array('.', ':', '@'); $result = ''; // Encode string using oct and hex character codes for ($i = 0; $i < strlen($email); $i++) { // Encode 25% of characters including several that always should be encoded if (in_array($email[$i], $alwaysEncode) || mt_rand(1, 100) < 25) { if (mt_rand(0, 1)) { $result .= '&#' . ord($email[$i]) . ';'; } else { $result .= '&#x' . dechex(ord($email[$i])) . ';'; } } else { $result .= $email[$i]; } } return $result; } 

Пример:

 echo getObfuscatedEmailAddress('firstname.last-name@example.com'); --> firstn&#x61;m&#x65;&#x2e;la&#115;t-name&#x40;examp&#108;e&#46;&#x63;om 

Второй возвращает ссылку, в которой адрес электронной почты кодируется как html, так и url:

 function getObfuscatedEmailLink($email, $params = array()) { if (!is_array($params)) { $params = array(); } // Tell search engines to ignore obfuscated uri if (!isset($params['rel'])) { $params['rel'] = 'nofollow'; } $neverEncode = array('.', '@', '+'); // Don't encode those as not fully supported by IE & Chrome $urlEncodedEmail = ''; for ($i = 0; $i < strlen($email); $i++) { // Encode 25% of characters if (!in_array($email[$i], $neverEncode) && mt_rand(1, 100) < 25) { $charCode = ord($email[$i]); $urlEncodedEmail .= '%'; $urlEncodedEmail .= dechex(($charCode >> 4) & 0xF); $urlEncodedEmail .= dechex($charCode & 0xF); } else { $urlEncodedEmail .= $email[$i]; } } $obfuscatedEmail = getObfuscatedEmailAddress($email); $obfuscatedEmailUrl = getObfuscatedEmailAddress('mailto:' . $urlEncodedEmail); $link = '<a href="' . $obfuscatedEmailUrl . '"'; foreach ($params as $param => $value) { $link .= ' ' . $param . '="' . htmlspecialchars($value). '"'; } $link .= '>' . $obfuscatedEmail . '</a>'; return $link; } 

Пример:

 echo getObfuscatedEmailLink('firstname.last-name@example.com'); --> <a href="mailt&#111;&#58;%66i&#37;72stna%&#54;d&#x65;&#46;&#37;6c&#x25;6&#x31;st&#x2d;name&#64;&#101;&#x78;&#x61;mple&#46;co&#109;" rel="nofollow">f&#x69;&#114;s&#x74;na&#109;e&#x2e;&#108;a&#x73;t-name&#64;e&#x78;ample&#46;co&#109;</a> 

Вот один из них с подсказкой типа PHP 7.

Просто позвоните ему с помощью $this->obfuscateEmail($email);

 /** * @param string $email * @return string */ private function obfuscateEmail(string $email) : string { $em = explode("@", $email); $name = implode(array_slice($em, 0, count($em) - 1), '@'); $len = floor(strlen($name) / 2); return substr($name, 0, $len) . str_repeat('*', $len) . "@" . end($em); } 

Здесь альтернативный способ в случае наличия одного символа перед хостом:

 /** * @param string $email * @return string */ private function obfuscateEmail($email) { $em = explode("@", $email); $name = implode(array_slice($em, 0, count($em)-1), '@'); if(strlen($name)==1){ return '*'.'@'.end($em); } $len = floor(strlen($name)/2); return substr($name,0, $len) . str_repeat('*', $len) . "@" . end($em); }