Daten im Impressum schützen
Um deine E-Mail-Adresse und Telefonnummer im Impressum vor Spambots zu schützen, gibt es verschiedene Möglichkeiten.
Step 1:
mit CSS die E-Mail-Adresse umdrehen.
span.reverse { unicode-bidi:bidi-override; direction: rtl; }
Somit wird aus:
moc.elpmaxe@olleh
wieder:
Step 2:
Der Laravel Weg:
namespace App\Helpers;
use Illuminate\Support\HtmlString;
class Mask
{
public function email($email, $name = null)
{
$name = $this->obfuscate($name ?: $email);
$email = $this->obfuscate('mailto:' . $email);
return new HtmlString('<a href="' . $email . '">' . $name . '</a>');
}
private function obfuscate($str)
{
$safe = '';
foreach (str_split($str) as $char) {
if (ord($char) > 128) {
return $char;
}
switch (rand(1, 3)) {
case 1: // decimal
$safe .= '&#' . ord($char) . ';';
break;
case 2: // hexadecimal
$safe .= '&#x' . dechex(ord($char)) . ';';
break;
case 3:
$safe .= $char;
}
}
return $safe;
}
}
Beides kann man jetzt ganz gut kombinieren. Unter Next.js verwende ich es so:
function Email(email = "hello@example.com") {
return Obfuscate(email).replace('@', '@');
}
function Obfuscate(value) {
let safe = '';
// Convert string to array, reverse it, then process each letter
for (let letter of [...value].reverse()) {
// Check if the character is outside the ASCII range
if (letter.charCodeAt(0) > 128) {
safe += letter;
continue;
}
// Random choice of obfuscation format
const choice = Math.floor(Math.random() * 3) + 1;
switch (choice) {
case 1:
safe += `&#${letter.charCodeAt(0)};`;
break;
case 2:
safe += `&#x${letter.charCodeAt(0).toString(16)};`;
break;
case 3:
safe += letter;
break;
}
}
return safe;
}
function ProtectedMail() {
return (
<span style={{ unicodeBidi: 'bidi-override', direction: 'rtl' }} dangerouslySetInnerHTML={{ __html: Email() }} />
);
}
Weitere Infos und Möglichkeiten gibt es auch hier.