Avatar billede tangveje Nybegynder
04. januar 2003 - 15:07 Der er 11 kommentarer og
1 løsning

Problem med reg. exp.

Hej, jeg har denne lille kode. Formålet er at den tager et stykke HTML kode, og retter alle src="et eller andet" til src="http://www.domain.com/et eller andet" altså så alle billeder henviser til den fulde url.

$html = preg_replace( "/src=\"(.*?)\"/i", "src=\"$theURL\\1\"", $html ) ;
$html = preg_replace( "/src='(.*?)'/i", "src='$theURL\\1'", $html ) ;

Det virker også til en vis grad. Jeg skal bare have den til at overse alle billeder som i forvejen henviser til den fulde url. altså :

Den her skal laves om

src="images/someimage.gif"

Denne skal ikke laves om

src="http://www.domain.com/someimage.gif"

Har prøvet mig lidt frem, men det er ikke lykkedes at få det helt perfekt. Enten virker det slet ikke, eller også virker det kun i nogen tilfælde.

Jeg skal også gerne have den til at tage højde for f.eks. src="../en.gif" på en eller anden måde.

Håber det er nogenlunde forståeligt :)
Avatar billede jespernaur Nybegynder
04. januar 2003 - 15:51 #1
Hvad med at gøre det i 2 skridt: Først fjerner du $theURL fra alle de billedereferencer, der måtte have den, dernæst indsætter du $theURL i samtlige. Det vil dog ikke virke, hvis dine data har referencer til billeder fra et helt fremmed sted.
Avatar billede tangveje Nybegynder
04. januar 2003 - 16:27 #2
Ja, det er lige netop det der er problemet. Det jeg arbejder på er et script som kan tage en hvilken som helst side, fjerne alt CSS, javascript, flash og hvad der ellers kunne være af den slags, og vise siden uden. Formålet er primært så folk kan se hvordan deres side ser ud i browsere der ikke understøtter den slags (eller i hvert fald tæt på :).

Det kræver dog at alle referencer til billeder der måtte være på siden, laves om så de kan fanges fra min server, og det er der problemet ligger, for det kan jo både være relative og absolutte stier, og kan jo peje på alverdens forskellige servere.
Avatar billede iqzero Nybegynder
04. januar 2003 - 16:58 #3
Hvad med noget i stil med...

preg_replace( "/src='(?!http)(.*?)'/i", "src='$theURL\\1'", $html ) ;
Avatar billede tangveje Nybegynder
04. januar 2003 - 17:03 #4
Desværre, det virker heller ikke helt :(
Avatar billede jespernaur Nybegynder
04. januar 2003 - 17:24 #5
Har du prøvet at kaste et blik på parse_url funktionen?
Avatar billede tangveje Nybegynder
04. januar 2003 - 17:34 #6
Det har jeg nu... Kan ikke lige se hvordan jeg kan bruge den i mit tilfælde. Jeg sidder jo ikke bare med en url i en variabel, men med en HTML kode fuld af urls... Virker i mit hoved lidt problematisk... Der må da være en måde at gøre det via reg. exp., ellers skal jeg jo igang med den helt store kode, det må være muligt anderledes.
Avatar billede jespernaur Nybegynder
04. januar 2003 - 17:47 #7
Jeg tror ikke det bliver så voldsomt som du frygter. Du skal have et regulært udtryk, der er i stand til at opdele din streng i 3 dele:

1) alt før den første URL, du er interesseret i
2) den første URL
3) resten

Så skal du have en løkke, noget i retning af (pseudokode):

$input = <den tekst der skal undersøges>;
$output = '';

do {

  // anvend det regulære udtryk, resultat i $part1, $URL, $therest

  $output = $output . $part1;

  // Undersøg $URL med parse_url, udfør nødvendige ændringer med resultat i $fixedURL

  $output = $output . $fixedURL;
  $input = $therest;
} while ($input != '');

Mvh
Jesper Naur
Avatar billede iqzero Nybegynder
04. januar 2003 - 17:52 #8
jeg har netop testet lidt, og

$html=preg_replace("/src='(?!http)(.*?)'/i","src='$theURL\\1'",$html);
$html=preg_replace("/src=\"(?!http)(.*?)\"/i","src='$theURL\\1'",$html);

virker fint for mig.. :)
Avatar billede tangveje Nybegynder
04. januar 2003 - 17:53 #9
Tja... Det er da rigtigt at det er en løsning, men jeg vil mene det er en "nødløsning", da jeg er ret overbevist om det kan lade sig gøre ved hjælp af reg. exp. alene, og hvis det kan, vil jeg foretrække den løsning.
Avatar billede tangveje Nybegynder
04. januar 2003 - 17:57 #10
iqzero > Ser ud til du har ret... Hvorfor det ikke virkede for mig tidligere var fordi det kræver at url'en ender med en / men det er jo blot en lille detalje der hurtigt kan gøres noget ved :)

Vil dog lige teste lidt yderligere, for at være sikker på den virker helt 100%
Avatar billede tangveje Nybegynder
04. januar 2003 - 18:07 #11
Det virker jo :) Takker mange gange, begge to
Avatar billede iqzero Nybegynder
04. januar 2003 - 19:05 #12
Anytime.
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