chris: gästebuch

(bin anfänger in php)

für mein gästebuch verwende ich folgenden code um www.irgendwas.de anklickbar zu machen:

$text = eregi_replace("http://www.", "www.", $text);
$text = eregi_replace("www.", "http://www.", $text);
$text = preg_replace("#(^|[^"=]{1})(http://|ftp://|mailto:)([^\s<>]+)([\s\n<>]|$)#sm","\1<a target="_blank" href="\2\3">\3</a>\4",$text);

gibt man nun zum beispiel wwwwwwwwwwwww ein wird das (leider) folgendermassen interpretiert: www.http://www.http://www.

jedes wort das mit www beginnt wird also zum link, obwohl eigentlich nur wörter die mit www. beginnen als link erscheinen sollen.
irgendwie wird der punkt da ignoriert.

was ist falsch an meinem code??

  1. ein Tipp:
    Falls Du Dich mit PEAR auskennen solltest:
    siehe URL unten.

  2. Hallo,

    Erstmal ein paar generelle sachen zu deinem Code:

    $text = eregi_replace("http://www.", "www.", $text);

    Ok du ersetzt du machst überall "http://" vor die Links! Soweit raff ichs noch! Obwohl wohl niemand das "www" groß schreiben wird, aber ist auch egal!

    $text = eregi_replace("www.", "http://www.", $text);

    Ok dann machtst du den Effekt wieder rückgängig? Mir leider etwas unverständlich aber erklär mir bitte warum du das machst.

    $text = preg_replace("#(^|[^"=]{1})(http://|ftp://|mailto:)([^\s<>]+)([\s\n<>]|$)#sm","\1<a target="_blank" href="\2\3">\3</a>\4",$text);

    Sollte alles auf den ersten Blick stimmen!

    gibt man nun zum beispiel wwwwwwwwwwwww ein wird das (leider) folgendermassen interpretiert: www.http://www.http://www.

    Ja natrülich weil du oben so ein "Gewurstel" mit dem ersetzen (was nicht case-insensetive sein muss!)!

    samy,

    1. Ok dann machtst du den Effekt wieder rückgängig? Mir leider etwas unverständlich aber erklär mir bitte warum du das machst.

      ok..
      $text = eregi_replace("http://www.", "www.", $text);
      schreibt jemand eine korrekte url wird sie in ein www. umgewandelt.
      $text = eregi_replace("www.", "http://www.", $text);
      schreibt jemand eine unvollständige url (www..) wird diese und die bereits umgewandelte zur korrekten url.
      ist doch perfekt :)

      »»(was nicht case-insensetive sein muss!)!

      versteh ich jetzt grad nur bahnhof

      »»Probier mal mit 'www.',

      jupie das funktioniert :)

  3. Hallo,

    (bin anfänger in php)

    und gleich reguläre Ausdrücke ausgesucht.

    für mein gästebuch verwende ich folgenden code um www.irgendwas.de anklickbar zu machen:

    Es gibt bessere und fertige Lösungen, auch hier im SelfRaum. Eine umfangreiche und vor allem hervorragend dokumentierte Klasse findest Du z.B. unter http://www.christian-seiler.de/projekte/php/bbcode/

    Warum nimmst Du überhaupt eregi_replace statt str_replace?

    $text = eregi_replace("http://www.", "www.", $text);
    $text = eregi_replace("www.", "http://www.", $text);

    Ein Punkt steht bei regulärem Ausdruck für ein bleibiges Zeichen, deswegen funktioniert der auch nicht so, wie Du den erwartest. Probier mal mit 'www.', aber wie gesagt, ist m.E. Overkill. Für ein einfaches Ersetzen sind RegExp viel zu langsam.

    Gruß, Thoralf

    --
    Sic Luceat Lux!
  4. Hi chris!
    Du solltest vielleicht zunächst die Funktion parse_url()
    (http://www.selfphp.info/funktionsreferenz/url_funktionen/parse_url.php)
    verwenden. Die zerteilt dir die User-Eingaben in ein hübsch übersichtliches assoziatives Array. Dann kannst du die einzelnen Teile mit einfacheren und übersichtlicheren regulären Ausdruck auf Gültigkeit überprüfen.
    Ich mache das jedenfalls so.

    Gruß

    n i c o