Avatar billede mr_bambi Nybegynder
30. april 2003 - 23:18 Der er 3 kommentarer og
1 løsning

Dybe links: Fjerne sidste del af URL's

Jeg er med til at drive en website, hvor vi har et større debatforum, og på det sidste har vi oplevet, at folk linker til de danske dagblades online-udgaver, som fx http://www.berlingske.dk/viden/artikel:aid=317576:fid=100100026.
Det jeg gerne vil have, er et ereg_replace eller preg_replace-script, der fjerner alt, hvad der står efter selve domænenavnet, hvis domænenavnet findes i array'et $banned_sites[].

Det, jeg selv har fundet frem til, er:
------------------------------
function remove_deep_links($post) {
    $banned_sites = array(
        'berlingske.dk',
        'politiken.dk',
        'jp.dk');

    for($i = 0; $i < count($banned_sites); $i++) {
        $post = ereg_replace("(http://|www.)+($banned_sites[$i])([a-z0-9~#%@&:;=!',_æøå()?/.-+\[\]|*$\^\{\}]+)", "\\1\\2", $post);
    }
    return $post;
}
------------------------------
Altså, hvis linket er fx http://politiken.dk, www.berlingske.dk eller http://www.jp.dk, så skal den fjerne alt, hvad der evt. står efter selve domænenavnet som i linket øverst på siden vil betyde, at jeg vil have "/viden/artikel:aid=317576:fid=100100026" fjernet.

En ting, der er værd at nævne er, at der tre ting, der kan afslutte en linie: [. ] (punktum efterfulgt af mellemrum), [.\n] (punktum,newline) eller blot [\n] (newline). Og er der flere end disse?

Jeg håber, at der er nogen, der kan hjælpe med spm'et.

Mvh
/Bjørn Amdi Sloth
Avatar billede Slettet bruger
01. maj 2003 - 03:14 #1
Kun testet kort... Men jeg tror den er der... under alle omstændigheder har du noget at arbejde med.


$string = "http:www.berlingske.dk.
http:www.berlingske.dk/fasdfsajl?fasd. asdf
http:www.berlingske.dk?sfa.dfsa. ";
echo nl2br($string);
echo "<br/><br/>";
$regexp = "/(berlingske\\.dk)(\\S*((\\.)|([^\\s])))/i";
echo nl2br(preg_replace($regexp,"\\1\\4",$string));
Avatar billede mr_bambi Nybegynder
02. maj 2003 - 02:26 #2
Øh, kan du ikke lige omskrive det, så det passer ind i den funktion, jeg skrev øverst? Jeg prøvede at tilpasse det let, men den bliver ved med at melde fejl, at der er en "unexpted ')'"...

/Amdi
Avatar billede Slettet bruger
02. maj 2003 - 02:37 #3
Skulle gerne køre det nu... samlingen mellem domænenavnet og parametrene skal være "/", ":" eller "?" denne vil f.eks. ikke omskrive "berlignske.dkkk".

<?php
$string = "http://www.berlingske.dk. http://www.berlingske.dk
http://www.berlingske.dk:fdas http://www.berlingske.dk?sfda
http://www.berlingske.dkfds http://www.berlingske.dk.
http:www.berlingske.dk/fasdfsajl?fasd. asdf
http:www.berlingske.dk?sfa.dfsa. ";
echo nl2br($string);
echo "<br><br>";

$domain = array("berlingske.dk","jp.dk","politiken.dk");
foreach($domain as $value)
{
    $value = str_replace(".","\\.",$value);
    $regexp = "/($value)((\\?)|(\\/)|(\\:))(\\S*((\\.)|([^\\s])))/i";
    $string = preg_replace($regexp,"\\1\\8",$string);
}
echo nl2br($string);
?>
Avatar billede mr_bambi Nybegynder
02. december 2003 - 16:02 #4
Jeg lukker vist lige denne her...
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
Kurser inden for grundlæggende programmering

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