Avatar billede lopolla123 Nybegynder
09. september 2005 - 09:05 Der er 12 kommentarer og
1 løsning

Hente webside

Jeg skal hente en webside, dvs. ikke ale billeder mm. men hente den kildekode, der ligger på et website via én URL.
Dette har jeg for så vidt også igennem CURL library, men når jeg viser siden på min egen server så mangler den forskellige URLs, hvis sidens oplysninger er relative (fx <img=images/blabla.jpg>.

Er der nogen librarys, funktioner, ea man kan gribe til for at rette disse ting, så det passer - eller skal man lave det hele fra bunden?
Jeg vil i ovenstående tilfælde gerne have der til at stå.
Dette gælder i mange tilfælde med forskellige kombinationer.

Jeg ser frem til høre nogle forslag :-)
Avatar billede jakobdo Ekspert
09. september 2005 - 09:06 #1
Du kan jo lave er str_replace() på hele kildekoden efterfølgende!
Avatar billede lopolla123 Nybegynder
09. september 2005 - 09:10 #2
Det er sandt nok, men hvordan vil du formulere den, hvis du ikke ved om der står <img src="images/fddfdf.jpg"> eller img src=../images/sddssd.jpg>...
Og det er jo ikke kun images, men css, mm. der vil ligge der, der skal udskiftes.

Så jeg ved ikke om du havde en konkret tanke i denne retning?
Jeg havde lidt håbet på, at der eksisterede nogle værktøjer, der kunne løse netop denne situation som folk nok har været ude for før.
Avatar billede jakobdo Ekspert
09. september 2005 - 09:15 #3
Om der står images eller ../images er jo som sådan ligemeget!
Hvis du foran alle sætter:
http://www.domain.tld/site/images/pic.jpg
http://www.domain.tld/site/../images/pic.jpg
De vil begge stadig virke.
Du skal dog tjekke om de evt har en fuld sti inden du replacer.
Avatar billede alaflam Nybegynder
09. september 2005 - 09:59 #4
Vil du bare få fat i alle image filer en hjemmeside ?
Avatar billede alaflam Nybegynder
09. september 2005 - 10:00 #5
filer = URL/adresse
Avatar billede coderdk Praktikant
09. september 2005 - 11:29 #6
Er det sådan noget du er ude efter?

    function getHtmlFromUrl( $url )
    {
        $text = file_get_contents( $url );
        preg_match( "§http://([^/]*)§", $url, $m );
        $root = $m[1];
        if ( substr( $url, -1, 1 ) != '/' )
        {
            echo $url = preg_replace( '§^(.+/)(.*)§', '\\1', $url );
        }
        $reps = array(
                '§=["\'](?!http://)(/.*?)["\']§' => "=\"http://" . $root . "\\1\""
                ,'§=["\'](?!http://)(.+?)["\']§' => "=\"" . $url . "\\1\""
            );
        return preg_replace( array_keys( $reps ), array_values( $reps ), $text );
    }
   
    $text = getHtmlFromUrl( 'http://theregister.co.uk/' );
Avatar billede alaflam Nybegynder
09. september 2005 - 18:20 #7
coderdk din kode vil ikke virker i de fleste samhæng...det er ikke alle hjemmeside der har links der starter med

http://
www.
../
java script:location.href=''

der er flere muligheder...
Avatar billede alaflam Nybegynder
09. september 2005 - 18:21 #8
jeg mente der er flere links der starter forskelligt på forskellige hjemmesider :)
Avatar billede coderdk Praktikant
09. september 2005 - 18:28 #9
Derfor jeg har lavet noget du kan tilpasse ;P
Avatar billede lopolla123 Nybegynder
09. september 2005 - 19:16 #10
Ja - det er det. Jeg har bare ét problem, og det er, at at regulære udtryk ikke er min stærke side - har testet det, og det ser jo lovende ud!

Er det $m jeg skal lege med - eller hvad?
Eller skal jeg først se at blive ekspert i regulære udtryk for jeg går videre?
Avatar billede coderdk Praktikant
09. september 2005 - 22:09 #11
Ja, regular expressions er guld værd - Jeg kender dog ikke lige nogle gode tuts, andet end www.regularexpressions.info - Jeg har lavet den lidt om, så den fungerer bedre:

    function getHtmlFromUrl( $url )
    {
        $text = file_get_contents( $url );
        preg_match( "§http://([^/]*)§", $url, $m );
        $root = $m[1];
        if ( substr( $url, -1, 1 ) != '/' )
        {
            echo $url = preg_replace( '§^(.+/)(.*)§', '\\1', $url );
        }
        $reps = array(
                '§(src|href)=["\'](?!(http://|java script:))(/.*?)["\']§' => "\\1=\"http://" . $root . "\\3\""
                ,'§(src|href)=["\'](?!(http://|java script:))(.+?)["\']§' => "\\1=\"" . $url . "\\3\""
            );
        return preg_replace( array_keys( $reps ), array_values( $reps ), $text );
    }

    echo $text = getHtmlFromUrl( 'http://theregister.co.uk/' );

Læg mærke til (?!(http://|java script:)) Her siger jeg at den skal ignorere dem der starter med http:// eller java script: vil du tilføje flere kan du gøre sådan: (?!(http://|java script:|mms://)) så ignorerer den også mms links...
Avatar billede lopolla123 Nybegynder
12. september 2005 - 22:05 #12
Mange tak for hjælpen - det virkede for så vidt også, men det kræver alligevel, at man er lidt ekspert i regulære udtryk, og det er jeg desværre ikke (da der opstår forskellige undtagelser)....
Jeg fandt dog også en løsning (programmet netwox) der er en linux programsuite.....
Se nedenstående link:
http://www.laurentconstantin.com/en/netw/netwox/

Hvis du vil have point coderdk så har du i hvert fald fortjent demm - ellers lukker jeg spørgsmålet :-)
Avatar billede coderdk Praktikant
12. september 2005 - 23:57 #13
Giv mig bare hvad du synes :-D
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