Avatar billede rotco Juniormester
14. november 2011 - 13:12 Der er 1 kommentar og
1 løsning

Lav ord til link script giver fejl

Hejsa,

Jeg har lavet et script, og det er egentlig under testmode, så derfor er der nogle ting som kunne gøres bedre, men det problem jeg vil have løst er:

Scriptet henter ordene fra en database, hvor der er lavet en tabel der hedder "keywords", og det virker faktisk ret godt, og efter hensigten - nogenlunde.

For det er sådan at hvis jeg har en tekst hvor der står:

Jeg elsker Michael Jackson.

Og jeg i min tabel "keywords", har Michael Jackson inde, så vil den lave Michael Jackson om til et link, som føre til min artikel om "Michael Jackson". Men hvis jeg gerne vil linke til en anden side om Michael Jackson i min wysiwyg, så er det der går kage i den!

Så ser teksten således ud i min database:

Jeg elsker <a href="http://eb.dk/michael-jackson-er-doed">Michael Jackson</a>.

Hvilket er fint, men det der sker går man går ind i artiklen er følgende:

Jeg elsker <a href="http://eb.dk/michael-jackson-er-doed"><a href="http://mitdomæne.dk/min-artikel-omkring-michael-jackson">Michael Jackson</a></a>.

Hvilket vil sige at mit script ikke checker for om teksten allerede ér et link, og laver derfor et link, inde i et link.

Scriptet ser sådan her ud:

<?php
$result11 = mysql_query("SELECT * FROM keywords");
$result22 = mysql_query("SELECT * FROM keywords");

while($row11 = mysql_fetch_assoc($result11)){
$keyword1 = $row11['keyword1'];

$patterns[] = "/(?<!\.)\b$keyword1\b(?<!\.)/i";
}
while($row22 = mysql_fetch_assoc($result22)){
$keyword11 = $row22['keyword1'];
$keyword2 = $row22['keyword2'];
$replacements[] = "<a href='$keyword2' title='$keyword11'>$keyword11</a>";
}

$artiklen1 = preg_replace($patterns, $replacements, $artiklen, 1);
?>

Jeg ved ikke hvordan man bedst kan gøre det, men den skal checke for om teksten allerede ér et link... hmm..

200 points til den der kommer med en løsning hurtigst muligt :-)
Avatar billede JensPeterSvensson Nybegynder
14. november 2011 - 15:48 #1
Der er ingen grund til at du foreter to selects og to gennemløb. Det du gør i det andet gennemløb kan du skrive i det første gennemløb.


Ideer til dit problem:

1. I preg_replace kan du test om at keywordet ikke er inde i et a tag. Men er temmelig svært at skrive rigtigt formentllig-
2. I stedet for at gør som du gør, kan du oprette et DOM dokument og foretage replacementent på alle tekstnoder, der ikke har en parent der er en a node.
3. Brug positionering til at begrænse din replace. Keyword replace til positionen til næste a tag tå find position til slut a tag og keyword replace derfra og til det næste a tag. etc....

Eftersom at tekst er konstant næsten altid ville jeg forslå at du gør dette når du indsætter teksten og ikke når du viser den.
Avatar billede rotco Juniormester
10. februar 2012 - 00:44 #2
JensPeterSvensson, tak for svaret, jeg vil forsøge mig med disse. Læg et svar så splitter vi pointene. Du får 100 point for din hjælp :)
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

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