Url`s automatisch in links umwandeln

  • Hallo, hab mit folgendem script das Problem, das meine url`s aus der datenbankabfrage nivht in anklickbare links umgewandelt werden.

    • Offizieller Beitrag

    Hallo,

    Grundsätzlich kann man dazu nur etwas sinnvolles sagen, wenn Du etwas mehr Infos gibst.
    Bspw. kennen wir Deine Funktion html_link() nicht.

    Zudem:

    • mysql_* Funktionen sind deprecated, nutze eine der Alternativen MySQLi oder PDO.
    • Nutze kein SELECT *, sondern gib die Spalten an, die Du brauchst: SELECT `title`, `filepath`, `body`
    • Wo soll der klickbare Link sein, bzw. aus welchem Feld soll der generiert werden?

    Gruß Arne

  • Meine Funktion html_link() steht gleich am anfang von dem Code den ich gepostet habe.
    Meine SELECT-Abfrage habe ich jetzt folgendermasen umgeändert:

    PHP
    $query = "SELECT files.nid, files.filepath, files.filename, node_revisions.nid, node_revisions.title, node_revisions.body FROM files,node_revisions WHERE files.nid = '$x' AND node_revisions.nid = '$x' AND files.filename = '_original' ";


    Der Text der aus der Datenbank gelesen werden soll stammt aus der Tabelle "node_revision.body" und wird hier ausgelesen und soll dann in "klickbare" Links umgewandelt werden:

    Die Ausgabe der abgefragten Dateien funktioniert, nur werden mir eben die Links aus dem Text welchen ich abfrage nicht in "klickbare" links umgewandelt.

    • Offizieller Beitrag

    Hallo,

    Zitat von mike36

    Meine Funktion html_link() steht gleich am anfang von dem Code den ich gepostet habe.

    Stimmt. Hatte ich übersehen.

    Zitat von mike36

    Die Ausgabe der abgefragten Dateien funktioniert, nur werden mir eben die Links aus dem Text welchen ich abfrage nicht in "klickbare" links umgewandelt.

    Ach so, Du meinst Links, die sich quasi im node_revisions.body befinden?

    Ja, Deine Pattern matchen nicht.
    Ich habe mal als Test ein ganz einfaches Pattern verwendet:

    PHP
    $str = preg_replace( '#((f|ht)tp://[\w.-_]+\.[a-z]{2,5})#i', '<a href="$1">$1</a>', $str );


    Das ist zwar kein sehr genaues Pattern, aber das matcht zumindest.

    Du musst also Deine Pattern überarbeiten, der Rest des Scriptes scheint zu stimmen.

    Gruß Arne

  • Also, du hattest Recht. Das Problem waren die Pattern. Hab jetzt die komplette Funktion total neu geschrieben und jetzt gehts.

    Hab aber absolut keine Ahnung, was da bei meinem ersten Versuch nicht gepasst hat, aber jetzt gehts ja.
    Warum einfach wenn mans auch kompliziert nachen kann.
    Vieen Dank für deine Hilfe.

    • Offizieller Beitrag

    Hallo,

    Warum setzt Du das erst in Backticks und entfernst die danach wieder :confused:

    EDIT: Grad gesehen, Du nutzt die als Delimiter, war ich geistig nicht drauf vorbereitet... :)
    Mit diesem Pattern greifst Du auch sftp und subdomains ab:

    Code
    #(\s+)?((s?f|ht)tps?://([\w\d-]+\.)?[\d\w-]+\.[a-z]{2,5}(.*)?)(\s+)?#i


    Geht sicherlich besser, aber für Dein Zweck sollte das passen.

    Gruß Arne

  • Danke,
    an sftp`s und subdomains hatte ich garnicht gedacht.

    Vielleicht sollte man einfach so spät in der Nacht nicht noch rumprogrammiern/experimentieren:-)