kostenloser Webspace werbefrei: lima-city


Alle Mailadressen ersetzen die 2.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    Nabend,

    vor einiger Zeit hatte ich mal ein Thema Alle Mailadressen ersetzen erstellt. Leider hänge ich noch immer an diesen Problemen:

    1. Es darf keinerlei Umwandlung innerhalb des <title>-Tags stattfinden
    2. Es darf keinerlei Umwandlung innerhalb von Inputfeldern (also auch hidden) geben
    3. Es darf keinerlei Umwandlung innerhalb von <script und <style geben


    Ich hatte derweil etliche Sachen ausprobiert, die allesamt nicht funktionieren wollten. Da ich nun langsam etwas wahnsinnig werde, frage ich einfach noch einmal hier (da ich ja auf das vorherige Thema nicht mehr antworten kann).

    Die letzte Lösung (danke nochmal an hackyourlife) ist:

    <?php
     
    header('content-type: text/plain');
     
    $whitelist = array('whitelist@example.com');
     
    $input = <<< ETX
    <a href="mailto:foo@bar.tld">foo@bar.tld</a>
    <a href="mailto:foo@bar.tld">Hallo World foo@bar.tld <img src="bild.ext" /></a>
    <a href="mailto:foo@bar.tld">Email</a>
    <a href="mailto:foo@bar.tld">bar@foo.tld</a>
    <a class="bla" href="mailto:foo@bar.tld" title="xyz">bar@foo.tld</a>
    <a href="http://domain.tld">foo@bar.tld</a>
    es gibt auch nicht verlinkte Mail-Adressen wie mail@example.com, welche irgendwo im Text vorkommen.
    Damit es auch kompliziert wird ist <a href="http://domain.tld?x=foo@bar.tld">das</a> auch erlaubt
    Eine Whitelist gibt es auch, siehe whitelist@example.com
    Mail-Adressen ala <a href="mailto:mail@example.com" class="whitelist">mail@example.com</a> sind auch dabei.
    Steht etwas auf der Whitelist wird es auch nicht ersetzt: <a href="mailto:whitelist@example.com">whitelist@example.com</a>.
    ETX;
     
     
    $link = '<a (.*)href=([\'"])(.+)\\2([^>]*)>(.*)<\/a>';
    $mail = '\\b[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}\\b';
     
    $pattern = "/$link|($mail)/U";
     
    function emailcallback($match) {
        global $whitelist;
        if(in_array($match[0], $whitelist))
            return $match[0];
        return strrev($match[0]);
    }
     
    function callback($match) {
        global $mail, $whitelist;
        $class = 'class="whitelist"';
        if(!empty($match[6]))
            return in_array($match[6], $whitelist) ? $match[6] : strrev($match[6]);
        $whitelisted = (strpos($match[1], $class) !== false) || (strpos($match[4], $class) !== false);
        if($whitelisted) {
            $href = $match[3];
            $content = $match[5];
        } else {
            $href = (!in_array(substr($match[3], 7), $whitelist) && (strpos($match[3], 'mailto:') === 0)) ? 'x.php?a=' . urlencode(base64_encode(substr($match[3], 7))) : $match[3];
            $content = preg_replace_callback("/$mail/U", 'emailcallback', $match[5]);
        }
        return "<a {$match[1]}href=\"$href\"{$match[4]}>$content</a>";
    }
     
    $output = preg_replace_callback($pattern, 'callback', $input);
     
    echo(<<< ETX
    INPUT:
    $input
     
    ====
     
    OUTPUT:
    $output
    ETX
    );


    Das funktioniert auch wunderbar. Lediglich die obigen "Fehler" machen mir etwas zu schaffen und ich finde einfach keine Lösung.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!