Avatar billede budda Nybegynder
07. marts 2006 - 13:01 Der er 13 kommentarer og
1 løsning

Erstatte ord med link lige gyldig om bogstaverne er store el. små

Jeg har følgende funktion som virker fint :)
Jeg vil gerne have den omskrevet så at det ikke kun er eks: Opslagsord men også OpSLAgsOrd

På forhånd tak

function interntlink($txt,$prikker = ""){
$res = mysql_query("SELECT o_ownlink, o_title FROM opslag") or die(mysql_error());
while ($row = mysql_fetch_assoc($res)) {
    $searchw = trim($row['o_title']);
    $search[] = $searchw;
    $repw = trim($row['o_ownlink']);
    $rep[] = "<a href=\"".$prikker."".$repw."\" title=\"".$searchw."\">".$searchw."</a>";
}
$new_str = str_replace($search, $rep, $txt);
return $new_str;
}
Avatar billede coderdk Praktikant
07. marts 2006 - 13:13 #1
$new_str = str_replace($search, $rep, $txt);

kan laves om til:

$new_str = preg_replace("/" . preg_quote($search, "/") . "/i", $rep, $txt);
Avatar billede jackass- Nybegynder
07. marts 2006 - 13:14 #2
Forklar lige nærmere..?
Avatar billede coderdk Praktikant
07. marts 2006 - 13:15 #3
Han vil kunne søge/erstatte case insensitivt ;)
Avatar billede budda Nybegynder
07. marts 2006 - 13:18 #4
Nemlig.
coderdk:
Får fejlen:
Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement in an array. in /srv/www/htdocs/folderxxx/html/functions.php on line 13

netop den jeg har erstattet
Avatar billede coderdk Praktikant
07. marts 2006 - 13:22 #5
Hov, så ikke at det var arrays!

function interntlink($txt,$prikker = ""){
$res = mysql_query("SELECT o_ownlink, o_title FROM opslag") or die(mysql_error());
while ($row = mysql_fetch_assoc($res)) {
    $searchw = trim($row['o_title']);
    $search[] = "/" . preg_quote($searchw, "/") . "/i";
    $repw = trim($row['o_ownlink']);
    $rep[] = "<a href=\"".$prikker."".$repw."\" title=\"".$searchw."\">".$searchw."</a>";
}
$new_str = preg_replace($search, $rep, $txt);
return $new_str;
}
Avatar billede coderdk Praktikant
07. marts 2006 - 13:27 #6
Hvis du bruger PHP5 ville du have kunne erstatte str_replace med str_ireplace :)
Avatar billede budda Nybegynder
07. marts 2006 - 13:28 #7
Lige for at gøre det mere besværligt kan man så gøresådan at der stadig kommer til at stå: OpSLAgsOrd istedet for det bliver erstattet med Opslagsord ?
Avatar billede budda Nybegynder
07. marts 2006 - 13:35 #8
ps husk at lægge et svar.
Avatar billede coderdk Praktikant
07. marts 2006 - 14:02 #9
Ikke lige på en let måde... :)
Avatar billede budda Nybegynder
07. marts 2006 - 16:04 #10
Coder nu er det et problem.
Hvis jeg har Opslag i databasen også så bliver Opslagsord også erstattet.
Altså den foreste del. Det var bestemt ikke meningen :)

Noget du kan hjælpe med?
Avatar billede coderdk Praktikant
07. marts 2006 - 16:20 #11
Muligvis. Prøv at erstatte:

    $search[] = "/" . preg_quote($searchw, "/") . "/i";

med

    $search[] = "/\b" . preg_quote($searchw, "/") . "\b/i";

\b er word boundary - mao vil den kun erstatte hele ord...
Avatar billede budda Nybegynder
07. marts 2006 - 19:27 #12
Endnu et problem :/
Kan jeg udelukke at der kommer et link hvis der alle rede er et link= Nu laver den links inden i hinadnen når der er 2 ord :) ups :)
Avatar billede coderdk Praktikant
07. marts 2006 - 19:35 #13
Ja, den var værre ;)
Avatar billede budda Nybegynder
07. marts 2006 - 19:37 #14
Opretter et ekstra spørgsmål :)
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