]*>.*?\1>#is', function ($m) use (&$placeholders) {
$key = '%%RAIJU_SKIP_' . count($placeholders) . '%%';
$placeholders[$key] = $m[0];
return $key;
}, $html);
$emailPattern = '[A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,}';
$html = preg_replace_callback('#]*?)\bhref=(["\'])mailto:([^"\']+)\2([^>]*)>(.*?)#is', function ($m) {
$before = $m[1];
$quote = $m[2];
$mailto = html_entity_decode($m[3], ENT_QUOTES, 'UTF-8');
$after = $m[4];
$label = $m[5];
$parts = explode('?', $mailto, 2);
$email = rawurldecode($parts[0]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return $m[0];
}
$query = isset($parts[1]) ? '?' . $parts[1] : '';
$attrs = preg_replace('#\s*href=' . preg_quote($quote, '#') . 'mailto:[^"\']+' . preg_quote($quote, '#') . '#i', '', $before . $after);
$fallback = preg_match('/^\s*' . preg_quote(htmlspecialchars($email, ENT_QUOTES, 'UTF-8'), '/') . '\s*$/i', trim($label))
? raijuEmailFallbackText($email)
: $label;
return '' . $fallback . '';
}, $html);
$html = preg_replace_callback('/(?' . raijuEmailFallbackText($email) . '';
}, $html);
if (!empty($placeholders)) {
$html = strtr($html, $placeholders);
}
return $html;
}
function raijuStartEmailObfuscation(): void {
static $started = false;
if ($started || raijuEmailObfuscatorIsAdmin() || !raijuEmailObfuscationEnabled()) {
return;
}
$started = true;
ob_start('raijuEmailObfuscateHtml');
}