CMSMS: Mailto Links mit Prefilter verschlüsseln

Um mit CMS Made Simple Mailto Links zu verschlüsseln, gibt es die gängigen Tags wie {mailto address=“your address“ encode=“javascript“}. Aus meiner Sicht sind diese jedoch nicht unbedingt benutzerfreundlich. Mit Typo3 kann man z.B. E-Mailadressen von Haus auf direkt beim Aufbau der Seite verschlüsseln. Hier nun die Anleitung wie dies mit CMS Made Simple geht.

Als erstes muss die Prefilterdatei erstellt werden: prefilter.mailsecure.php

Als Inhalt wird folgendes eingefügt:

<?php
function smarty_cms_prefilter_mailsecure($tpl_source, &$smarty)
{
return encrypt_content_email($tpl_source);
}

function myMailEncrypt($string,$back=0,$method=1) {
$out = “;

if ($method === ‚ascii‘) {
for ($a=0; $a<strlen($string); $a++) {
$out .= ‚&#‘.ord(substr($string, $a, 1)).‘;‘;
}

} else {
for ($a=0; $a<strlen($string); $a++) {
$charValue = ord(substr($string,$a,1));
$charValue+= intval($method)*($back?-1:1);
$out.= chr($charValue);
}

}
return $out;
}

function encrypt_content_email($content) {

// Attribute, ggf. aendern
$atzeichen = „(at)“; // Ersatzzeichen fuer das @

// hier via regEx alle email-adressen heraussuchen
preg_match_all(„/(mailto:)?([a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum))/im“,$content,$matches);

// hier jetzt alle gefundenen durchgehen und ersetzen
if ( isset ($matches[0][0]) and $matches[0][0] != “) {
for ($m = 0; $m < count ($matches[0]); $m++) {
$mystring = $matches[0][$m];
$findme  = ‚mailto:‘;
$pos = strpos($mystring, $findme);
$encrypted_email_address = „“;
if ($pos === false) {

$encrypted_email_address .= str_replace(„@“,$atzeichen,$mystring);
} else {
$encrypted_email_address .= „javascript:linkTo_UnCryptMailto(‚“.myMailEncrypt($mystring).“‚)“;
}
$content = str_replace($matches[0][$m],$encrypted_email_address,$content);
}
}
return $content;

}

?>

Die Prefilter Datei muss ins Verzeichnis „plugins“ geladen werden.

Danach muss folgenes JavaScript im Head der Seite eingefügt werden:

<script type=“text/javascript“> <!–
function UnCryptMailto( s )
{
var n = 0;
var r = „“;
for( var i = 0; i < s.length; i++)
{
n = s.charCodeAt( i );
if( n >= 8364 )
{
n = 128;
}
r += String.fromCharCode( n – 1 );
}
return r;
}

function linkTo_UnCryptMailto( s )
{
location.href=UnCryptMailto( s );
}
// –>
</script>

Danach werden alle mailto: Links verschlüsselt.

Related Posts: