Avatar billede aggemamme Nybegynder
25. juli 2004 - 21:49 Der er 10 kommentarer og
1 løsning

Erstatte links med urlencoded streng

Hej

Jeg ønsker at finde alle links i en given tekststreng, og lave dem om fra fx

<a href="/images/1.jpg">Link</a>

til

<a href="redir.php?redir_to=%2Fimages%2F1.jpg">

Altså tilføje noget foran og urlencode selve adressen.

Jeg har prøvet med ereg_replace, men kan ikke finde ud af hvordan jeg erstatter den fundne streng med en urlencoded version.
Avatar billede erikjacobsen Ekspert
25. juli 2004 - 21:50 #1
Avatar billede aggemamme Nybegynder
25. juli 2004 - 21:55 #2
Hej - tak for svar.

Jeg kender godt urlencode-funktionen, men mit problem er at benytte det sammen med ereg_replace.

Hmm, kan man benytte funktioner direkte i ereg_replace's andet argument?
Avatar billede aggemamme Nybegynder
25. juli 2004 - 22:00 #3
Nu har jeg flg.:

ereg_replace ("href=\"[^<>[:space:]]+[[:alnum:]/]\"",'href="redir.php?redir_to=' . urlencode('\\0'). '"',$data);

Linkene kommer bare til at fremstå således:

href="redir.php?redir_to=%5C0"

altså \0 urlencoded - i stedet for den fundne forekomst.
Avatar billede aggemamme Nybegynder
25. juli 2004 - 22:02 #4
Jeg tror det kan være fordi argument 2 til ereg_replace behandles allerførst, inden den begynder at erstatte nogetsomhelst. Dette gør den nok for at spare CPU, så den ikke skal behandle argument 2 ved hver erstatning.
Avatar billede erikjacobsen Ekspert
25. juli 2004 - 22:04 #5
Du skal nok i gang med preg_replace, der kan det du ønsker.
Kig på formen med /..../e
Avatar billede aggemamme Nybegynder
25. juli 2004 - 22:22 #6
Nu har jeg

preg_replace ('/href="([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?"/',"href=\"redir.php?redir_to='" . urlencode('\\1'). "\"",$data);

Hvis jeg undlod urlencode virker det fint (den synes altså at linket er et match), men så snart det står udenfor i en funktion, så virker det ikke længere (den urlencoder selve \\1 i stedet for match nr. 1).
Avatar billede aggemamme Nybegynder
25. juli 2004 - 22:23 #7
Ok, NU forstår jeg hvad /e gør :)

det virker nu. Tak for hjælpen
Avatar billede aggemamme Nybegynder
25. juli 2004 - 22:24 #8
Endeligt, fungerende eksempel:

  $data = preg_replace ('/href="([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?"/e',"'redir.php?redir_to='. urlencode('\\1') . '\"'",$data);
Avatar billede aggemamme Nybegynder
25. juli 2004 - 22:24 #9
Forresten: Læg et svar hvis du vil have point! :)
Avatar billede erikjacobsen Ekspert
25. juli 2004 - 22:25 #10
Nej tak, ingen point til mig. Dels lavede du arbejdet, dels samler jeg slet ikke på point. preg-erne kan meget mere end ereg-erne ;)
Avatar billede aggemamme Nybegynder
25. juli 2004 - 22:28 #11
Jeg samler jo heller ikke på point :)

Men jeg kan jo blive nødt til at tage dem til mig igen :)

Endnu en gang, tusind tak 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
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