Avatar billede voirsous Nybegynder
23. marts 2005 - 13:15 Der er 3 kommentarer og
1 løsning

Søge dokument for links

Hej, søger jeg nemmest et HTML dokument igennem for links, og smider det ned i et array?

altså links der starter med http:// eller https://

Vh. Casper
Avatar billede barklund Nybegynder
23. marts 2005 - 13:30 #1
preg_match_all("#https?://[^\w\"']+#i", $page, $matches);

Så kan du finde alle matches i $matches - prøv at var_dump'e den for at se strukturen.

I ovenstående går den lidt ud fra, at alle links slutter når der kommer enten whitespace (mellemrum, linjeskift..) eller enkelt- eller dobbelt-quote.

Det skal måske tweakes lidt til dine behov, men det plejer at gå meget godt :)

Hvis alle links står i <a href="http://link" så er det endnu nemmere.

--
Morten Barklund
Avatar billede voirsous Nybegynder
23. marts 2005 - 13:47 #2
ahh nu kan jge huske hvorfor, jeg glemte nogle kriterier.
- det er alle links i en href=".

Jeg havde lavet en trucker lang funktion, som fandt alle links som ikke startede med java script:, #, mailto:, Hvis et link efter det første tjek ikke startede med http:// eller https://, så smid sidens URL på.

Kunne man lave en preg match der gjorde det?

Vh. Casper
Avatar billede barklund Nybegynder
23. marts 2005 - 14:04 #3
Ja, det kan man godt:

preg_match_all("#<a href=\"(?<!mailto|#|javascript)(.*?)\"#i", $page, $matches);

Så har du alle URL'er i $matches[1].

De skal så lige ændres med denne funktion:

$page_url = "http://foobar.com/bar/page.html";
$url = parse_url($page_url);
function full_url($u) {
    global $url;
    if (strpos($u, "http") === 0) {
        return $u;
    } else if (strpos($u, "/") === 0) {
        return $url['scheme']."://".$url['host'].$u;
    } else {
        return $url['scheme']."://".$url['host'].realpath(dirname($url['path'])."/".$u);
    }
}

Så kan du smide dit array igennem den som:

$urls = array_map('full_url', $matches[1]);

Det er ikke testet - men det ser da fornuftigt ud :)

--
Morten Barklund
Avatar billede voirsous Nybegynder
02. august 2005 - 11:57 #4
Takker :). Lukker, der er intet svar og jeg har fået at vide jeg skal lukke mine spm. Jeg smider derfor selv et svar. Hvis i vil have point så skriv :)
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