Avatar billede naesbygaard Nybegynder
14. april 2005 - 02:16 Der er 10 kommentarer

eregi_replace - forskel fra server til server som er meget wierd!

Jeg sidder lige og fedter lidt med noget eregi_replace.
Jeg har en masse ord (læs: en tekst) hvoraf nogle af ordene skal laves om til links.
Jeg har et array med de ord som skal linkificeres.
Jeg bruger:
$story = eregi_replace("$ny[$i]", "<a href=$ny[$i].html>$ny[$i]</a>", $story);
og kører på den måde historien igennem for hvert af ordene i arrayet med ord.
Hvis jeg kører scriptet på min ene server så kan den kun finde ud af lave linket på det allersidste ord i arrayet.
Hvis jeg kører scriptet på min anden server så virker det fint.
Den som godt kan kører php 4.3.11, den anden kører 4.3.9.
Er der nogen der kender til dette?

/NbG
Avatar billede barklund Nybegynder
14. april 2005 - 09:24 #1
Du burde da bare kunne gøre det med str_replace? Og det er ikke så pænt at skrive den slags variabel-opslag inden i din streng - det kan nok godt give problemer. Prøv i første omgang med:

$story = eregi_replace($ny[$i], "<a href=".$ny[$i].".html>\\1</a>", $story);

Men eregi_replace tager også et array, så du kan vist bare gøre det som:

$story = eregi_replace($ny, "<a href=\\1.html>\\1</a>", $story);

Tror jeg :)
Avatar billede naesbygaard Nybegynder
14. april 2005 - 11:04 #2
Det lader ikke til at eregi_replace virker med array.
Desuden kan jeg heller ikke få det med to backslashes til at virke.
Sidst men ikke mindst, så kunne jeg godt tænke mig at den kun replacede strenge som er helt magen til og ikke kun en del af, samt undgå at replace noget som er i et tag. F.eks. skal den ikke replace ht i fil.html - det går jo ikke helt.

/NbG
Avatar billede barklund Nybegynder
14. april 2005 - 11:20 #3
Altså, kun enkeltstående ord skal laves til links?
Avatar billede naesbygaard Nybegynder
14. april 2005 - 11:56 #4
ja samt dem der ender på ,.?! - men problemet er bare at disse tegn ikke skal fjernes fra teksten. Jeg prøver med noget nær
eregi_replace("^$ny$i]$", <a href=$ny[$i].html>$ny[$i]</a>, $story);
men så æder den også min punktummer og kommaer og den slags. Hvordan får jeg dem til at blive?

/NbG
Avatar billede barklund Nybegynder
14. april 2005 - 12:10 #5
Tja, jeg er nu mere en PCRE-kinda guy, så jeg foreslår:

$ord = array("hest", "søko", "flaf");
$str = "Her er en hest. Søkoen er en Søko. Sikke noget flaf";
foreach($ord as $o) {
  $str = preg_replace("/(?<!\w)(".$o.")(?!\w)/i","<a href=\"".$o.".html\">\\1</a>", $str);
}
var_dump($str);

Ikke lige testet, men det virker fornuftigt :)

--
Morten Barklund
Avatar billede barklund Nybegynder
14. april 2005 - 12:11 #6
Okay, har lige testet - og det virker jo fremragende :D
Avatar billede naesbygaard Nybegynder
14. april 2005 - 12:27 #7
Det ser meget fornuftigt ud, men hvis du tilføjer hest endnu engang til $ord, så går der kage i den alligevel. Så den blander sig stadigvæk i tags...
Jeg forstår den ikke helt, hvad er der / ! og w og /i ???

/NbG
Avatar billede barklund Nybegynder
14. april 2005 - 13:50 #8
Det er et forholdsvist avanceret PCRE udtryk. Læs om de forskellige konstruktioner her: http://wiki.tcl.tk/9384

Og hvorfor ville du proppe hest ind to gange? Du skal vel ikke highlighte samme ord mere end én gang? Og det er jo kun fordi, det er præcis det samme ord, at det vil stå for sig selv to gange.
Avatar billede naesbygaard Nybegynder
14. april 2005 - 23:04 #9
nu fjerner jeg dubletterne, men nogle steder er jeg ude i små sætninger (max 3 ord).
Men hvis jeg så replacer et ord som er en del af en sætning f.eks. "flaf er" før jeg replacer "flaf" - så går der ged i den. Så den holder sig ikke helt væk fra tagsne.

/NbG
Avatar billede barklund Nybegynder
15. april 2005 - 12:07 #10
Nej, det gør den ikke - det kan ikke laves helt enkelt. Det ville jeg i stedet gør ved at vælge et passende array af ord. Du sagde jo heller ikke, at nogle ord var flere ord :)
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