toss Skrevet 27. mars 2006 Del Skrevet 27. mars 2006 hei i et skript jeg jobber med har jeg html-koden for en side i en streng. jeg trenger å legge til en variabel foran adressene i alle linkene som IKKE starter med "http://".. har prøvd med følgende regex, men det funker ikke.. det som skjer nå er at $dom kommer forran alle linker, ikke bare de som ikke begynner med http:// kan noen se hva som er gale? $pattern = '^(a href=\"){1}(http://){0}^'; $replace = ('a href="' . $dom); $side = preg_replace($pattern, $replace, $side); har prøvd å sette utropstegn forran (http://) men det funker ikke.. da skjer det ikke noen forandringer.. takk for all hjelp Lenke til kommentar
Magnus Holm Skrevet 27. mars 2006 Del Skrevet 27. mars 2006 Hvorfor har du en ^ i slutten av pattern? Lenke til kommentar
toss Skrevet 27. mars 2006 Forfatter Del Skrevet 27. mars 2006 (endret) jeg far en feilmelding om jeg ikke gjor det.. noe om at endingperimiter eller delimiter ^ ikke blir funnet.. har provd a ta den vekk og finne andre losninger, men jeg fant ingen.. na kommer det ingen feilmeldinger, det bare funker ikke helt som det skal.. Endret 27. mars 2006 av toss Lenke til kommentar
toss Skrevet 30. mars 2006 Forfatter Del Skrevet 30. mars 2006 sorry for dobbelpost.. men er det ingen som kan hjelpe? Lenke til kommentar
trondes Skrevet 31. mars 2006 Del Skrevet 31. mars 2006 (endret) sorry for dobbelpost..men er det ingen som kan hjelpe? 5842707[/snapback] Jubler.. min første regex ( håper den virker nå da ) $pattern = '/((<a href=")(!http:\/\/))/i'; $replace = ('a href="' . $dom); $side = preg_replace($pattern, $replace, $side); Vi skal heler ikke nevne at jeg brukte nesten en halv time på det da EDIT: eni feil.. må fine en løsning på denne... EDIT2: Fant feilen, nå skal jeg fine sengen... Endret 31. mars 2006 av trondes Lenke til kommentar
toss Skrevet 16. april 2006 Forfatter Del Skrevet 16. april 2006 hei igjen sorry for sent svar, men jeg dro på ferie rett etter forrige post, og kom igjen i dag.. den virket dessverre ikke.. legger ved hele koden i tilfelle noen vil ta seg tid til å se igjennom og kanskje finne en løsning.. koden er ikke renskrevet enda, men tror det skal gå ann å finne frem likevel. <?php session_start(); if(isset($_POST['key'])){ $_SESSION['key'] = $_POST['key']; } if($_GET['signout']){ unset ($_SESSION['key']); } $adr = $_POST['adr']; $key = $_SESSION['key']; $salt = "..."; if(!isset($adr)) { if(isset($_GET['adr'])){ $adr = $_GET['adr']; } else { $adr = 'http://diskusjon.no'; } } if(md5($salt . $key) === '4291af114e804723651b8e1b75d5b1e1'){ ?> <form action="noob2.php" method="post"> <fieldset> <label for="adr">Adresse:</label> <input type="text" name="adr" size="130" value="<?php echo($adr); ?>" /> <input type="hidden" name="signout" value="false"> <input type="submit" value="GO TO" /> </fieldset> </form> <form action="noob2.php?signout=true" method="post"> <input type="submit" value="Signout"> </form> <hr><br> <?php $pattern = '^(http://[-a-zA-Z0-9\.]+)/'; ereg($pattern, $adr, $regs); $dom = $regs[1]; $side = file_get_contents($adr); $pattern = '/((<a href=")(!http:\/\/))/i'; $replace = ('<a href="' . $dom); $side = preg_replace($pattern, $replace, $side); echo $side; ?> <?php } else { ?> <h2>Login</h2> <form action="noob2.php" method="post"> <p>Entrancekey: <input type="password" name="key"><input type="submit" value="Log in"></p> </form> <?php } ?> takker for all hjelp Lenke til kommentar
MC2 Skrevet 17. april 2006 Del Skrevet 17. april 2006 du trenger ikke regex for å løse dette. if(strtolower(substr($side,0,strlen("http://"))) != "http://") { $side = "http://".$side; }; vil nok fikse det. Lenke til kommentar
toss Skrevet 17. april 2006 Forfatter Del Skrevet 17. april 2006 det funket ikke det heller.. alt det gjorde var at det puttet "http://" på begynnelsen av selve siden, ikke på begynnelsen av alle linker hovr det ikke er fra før.. Lenke til kommentar
MC2 Skrevet 17. april 2006 Del Skrevet 17. april 2006 ok, da misforsto jeg deg prøvd meg frem litt her: function add_http_to_links($input) { $p = '/(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/'; $a = preg_split($p,trim($input),-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); foreach($a as $v) { if(strtolower(substr($v,0,2)) == "<a" && strpos($v,'href="http://') != true) { $r[] = preg_replace('/href="(.*?)"/i','href="http://\\1"',$v); } else { $r[] = $v; }; }; $input = implode("",$r); return $input; }; echo add_http_to_links($side); funker hos meg, se hvis det funker til ditt bruk. Lenke til kommentar
CruellaDeVille Skrevet 17. april 2006 Del Skrevet 17. april 2006 hei i et skript jeg jobber med har jeg html-koden for en side i en streng. jeg trenger å legge til en variabel foran adressene i alle linkene som IKKE starter med "http://".. har prøvd med følgende regex, men det funker ikke.. det som skjer nå er at $dom kommer forran alle linker, ikke bare de som ikke begynner med http:// kan noen se hva som er gale? $pattern = '^(a href=\"){1}(http://){0}^'; $replace = ('a href="' . $dom); $side = preg_replace($pattern, $replace, $side); har prøvd å sette utropstegn forran (http://) men det funker ikke.. da skjer det ikke noen forandringer.. takk for all hjelp 5820181[/snapback] Du har lenker av type "vg.no" og skal sette http:// foran slike? Og hva er variabelen $dom? Men hvis du har lenken "vg.no" og vil heller ha "http://vg.no" så kan du vel skrive noe slikt som dette: <?php $lenker = array("vg.no", "http://dagbladet.no","nibbler.no", "www.uib.no"); foreach($lenker as $lenke){ $pattern = "http:\/\/"; if(!preg_match("/^$pattern/", $lenke)){ $lenke = preg_replace('/^/', 'http://', $lenke); } echo ("<a href=\"$lenke\">$lenke</a><br />"); } ?> I variabelen $pattern skriver jeg hvordan jeg vil lenkene skal begynne. Siden / er en delimiter i regulære uttrykk må den escapes (derfor \/\/). Så sier jeg at hvis ikke strengen begynner med (vises ved ^) tekst slik det står i pattern - bytt ut begynnelsen av strengen (vises som ^ i preg_replace) med http:// Lenke til kommentar
toss Skrevet 17. april 2006 Forfatter Del Skrevet 17. april 2006 tusen takk for svar. variabelen $dom er adressen til siden som hentes frem uten siste biten, eller filnavnet.. det jeg vil er altså å legge $dom til forran alle linker som ikke starter med http:// beklager dårlig forklaring tidligere. i en vanlig html side (feks. http://www.minside.no/home/mittliv.html) vil kanskje en link se slik ut: "/skoletur06.html", og de vil jeg gjøre om til http://www.minside.no/home/skoletur06.html. dette vil gjøres automatisk i nettleseren, men skriptet er en tunnel, eller hva man vil kalle det så nettleseren vil sette http://mintunnel.no/ forran i stedet for $dom, og lenke til en side som da ikke finnes, eller i hvert fall være helt feil.. $dom er allerede hentet ut av adressen og vil da være http://www.minside.no/home/ håper dette var bedre forklart.. igjen tusen takk for all hjelp Lenke til kommentar
MC2 Skrevet 17. april 2006 Del Skrevet 17. april 2006 function add_http_to_links($input) { $p = '/(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/'; $a = preg_split($p,trim($input),-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); global $dom; foreach($a as $v) { if(strtolower(substr($v,0,2)) == "<a" && strpos($v,'href="'.$dom) != true) { $r[] = preg_replace('/href="(.*?)"/i','href="'.$dom.'\\1"',$v); } else { $r[] = $v; }; }; $input = implode("",$r); return $input; }; echo add_http_to_links($side); tror dette burde være nok. Lenke til kommentar
toss Skrevet 17. april 2006 Forfatter Del Skrevet 17. april 2006 den funker fint bortsett fra at den legger $dom til forran linker som http://www.akam.no som på toppen av diskusjon.no... Lenke til kommentar
Magnus Holm Skrevet 17. april 2006 Del Skrevet 17. april 2006 Jeg skjønner ikke hvorfor dere driver å roter med RegEx her. Hva med noe sånt no: $string = "test.html"; $find = "http://"; $strpos = strpos($string, $find); if ($strpos === false || $strpos != 0) { $string = $dom . $string; } Lenke til kommentar
toss Skrevet 17. april 2006 Forfatter Del Skrevet 17. april 2006 jeg skal finne alle linker pa en hel side og sjekke om de begynner med http://.. om de ikke gjoer det, skal jeg putte $dom inn forran linken.. det vil funke fintofr a sjekke om brukeren har skrevet http:// inn i feltet, men den vil ikke soeke hele siden for linker uten http://, og det er det jeg trenger.. jeg vil kanskje fa bruk for det du lagde, sa takk for det, men det var ikke loesningen pa det egentlige problemet.. Lenke til kommentar
trondes Skrevet 18. april 2006 Del Skrevet 18. april 2006 jeg skal finne alle linker pa en hel side og sjekke om de begynner med http://..om de ikke gjoer det, skal jeg putte $dom inn forran linken.. det vil funke fintofr a sjekke om brukeren har skrevet http:// inn i feltet, men den vil ikke soeke hele siden for linker uten http://, og det er det jeg trenger.. jeg vil kanskje fa bruk for det du lagde, sa takk for det, men det var ikke loesningen pa det egentlige problemet.. 5939626[/snapback] Slik du vil ha det da? http://www.vestnes.org/tmp/test03.php Lenke til kommentar
toss Skrevet 18. april 2006 Forfatter Del Skrevet 18. april 2006 JA:D helt perfekt:) kunne jeg fått det skriptet? tusen tusen takk! Lenke til kommentar
trondes Skrevet 18. april 2006 Del Skrevet 18. april 2006 Viste det var noe jeg hadde glemt $side = preg_replace('/((<a href=")([^h][^t][^t][^p][^\/][^\/]))/i','\2http://'.$dom.'/\3', $side); Lenke til kommentar
toss Skrevet 18. april 2006 Forfatter Del Skrevet 18. april 2006 funket helt perfekt! tusen takk! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå