Avatar billede c971875 Nybegynder
30. oktober 2001 - 08:29 Der er 6 kommentarer og
1 løsning

regular expressions til genkende links

Jeg laver en funktion, som skal kunne tage en string, genkende links, og \'bearbejde\' dem.

En streng kunne være

\"Dette er et link til [eksperten]. Dette er et link til [jubii].\"

Funktionen skal så finde de to links som er placeret i firkantede paranteser, altså eksperten og jubii. Derefter skal den slå de to navne op i en database over navne og URL\'s.

Jeg har prøvet med
ereg(\"(\\[[^]\\ ]+\\])\", $formattext, $array)
i den tro at $array så ville komme til at se sådan ud:
$array[0] = \"Dette er et link til [eksperten]. Dette er et link til [jubii].\"
$array[1] = \"eksperten\"
$array[2] = \"jubii\"

Så kunne jeg loope igennem arrayet og lave et database opslag ad gangen, men $array indeholder kun det første link, som findes i teksten og det er ikke godt nok... Men hvad gør man så?
Kan man bede ereg om at søge til første forekomst, stoppe der og så søge videre næste gang man kalder ereg?
Avatar billede tdaugaard Nybegynder
30. oktober 2001 - 08:34 #1
Jeg flikker lige en funktion sammen til dig .. du skal bruge preg_match_all()
Avatar billede c971875 Nybegynder
30. oktober 2001 - 08:39 #2
Når man så bagefter skal erstatte \"[jubii]\" med \"<A href=\'http://www.jubii.dk\'\", er det så nemmest at bruge en ereg_replace, eller kan preg_match_all() også klare den side af sagen?
Avatar billede tdaugaard Nybegynder
30. oktober 2001 - 08:40 #3
Der bruger du som bare str_replace()..

Hvordan skal det der database opslag foregå ? Altså, skal den lede efter f.eks. en record hvor et felt = \"eksperten\" ?
Avatar billede tdaugaard Nybegynder
30. oktober 2001 - 08:45 #4
<?php
    function parselink($str) {
        preg_match_all(\"/\\[[\\w]+\\]/i\", $str, $regs, PREG_PATTERN_ORDER);

        $matches = sizeof($regs[0]);
        for ($i = 0; $i < $matches; $i++) {
            $entry = substr($regs[0][$i], 1, strlen($regs[0][$i]) - 2);
            $sql .= \"link=\'$entry\' OR \";

        }

        if ($sql) {
            $res = mysql_query(\"SELECT url,link FROM links WHERE \" .substr($sql, 0, strlen($sql) - 4)) or die(mysql_error());
            while ($row = mysql_fetch_row($res)) {
                $str = str_replace($row[1], \"<a href=\\\"$row[0]\\\" target=\\\"_blank\\\">$row[0]</a>\", $str);
            }

        }
        return $str;
    }

    echo parselink(\"Dette er et link til [eksperten]. Dette er et link til [jubii].\");
?>

Denne funktion vil parse fx. teststrengen der for [(hvad som helst goes here)], dvs. [eksperten] osv., derefter opbygge en SQL streng til at select\'e fra DB\'en på EEN gang og så løbe det igennem med en løkke.

Jeg antager her at din tabel hedder \"links\", at feltet \"url\" indeholder den rigtige adresse og at \"link\" indeholder \"symbolet\" (f.eks. \"eksperten\", \"jubii\" osv.)
Avatar billede tdaugaard Nybegynder
30. oktober 2001 - 08:47 #5
Og så kan vi lige gøre den idiot sikker således at:

Link til [EkSpErten]

er det samme som

Link til [eksperten]

<?php
    function parselink($str) {
        preg_match_all(\"/\\[[\\w]+\\]/i\", $str, $regs, PREG_PATTERN_ORDER);

        $matches = sizeof($regs[0]);
        for ($i = 0; $i < $matches; $i++) {
            $entry = strtolower(substr($regs[0][$i], 1, strlen($regs[0][$i]) - 2));
            $sql .= \"link=\'$entry\' OR \";

        }

        if ($sql) {
            $res = mysql_query(\"SELECT url,link FROM links WHERE \" .substr($sql, 0, strlen($sql) - 4)) or die(mysql_error());
            while ($row = mysql_fetch_row($res)) {
                $str = eregi_replace($row[1], \"<a href=\\\"$row[0]\\\" target=\\\"_blank\\\">$row[0]</a>\", $str);
            }

        }
        return $str;
    }

    echo parselink(\"Dette er et link til [eksperten]. Dette er et link til [jubii].\");
?>
Avatar billede c971875 Nybegynder
30. oktober 2001 - 09:00 #6
Takker mange gange...
Avatar billede tdaugaard Nybegynder
30. oktober 2001 - 09:02 #7
Det var så lidt :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester