Avatar billede festhest Nybegynder
25. januar 2002 - 00:39 Der er 17 kommentarer

url <> urltext

Jeg har en streng der ser sådan ud:

$string = "En fantastisk god søgemaskine: http://www.google.com(Google.com).";

Så skal jeg have en funtion der kan lave urls om til klikbare links, og det der står i parentes() efter urlen skal stå som link tekst. Stregen skal se sådan ud:

$string = "En fantastisk god søgemaskine: <a href='http://www.google.com'>Google.com</a>.";

Kan det lade sig gøre?

Avatar billede bromer Nybegynder
25. januar 2002 - 03:35 #1
Det kan det godt. Der findes flere scripts rundt omkring, der kan finde links i en tekst og gøre dem klikbare. Problemet er tit at man gerne vil gøre dette på indholdet af tekster etc, som brugere skriver, og man kan derfor ikke være sikker på at alle bruger http:// eller for den sags skyld www.

Det er dog ikke noget problem at lave det lille script, hvis det alle er links der opfylder en eller anden specifikation ud over din parentes-regl. Hvis du lige gider at specificere nogle regler, så kan jeg sagtens lave det script til dig ;)

/Rune
Avatar billede nephilim Nybegynder
25. januar 2002 - 05:00 #2
tjaa, måske sådan her?? så bruger du bare | i stedet for paranteser

$ta=strstr($string, "|");
if ($ta) {
  $la=strlen($string); $lt=strlen($ta);
  $linktext=substr($string,$la-$lt+1);
  $string=substr($a,0,$la-$lt);
    } else {
          $linktext=$a;
      }
        $s=$s. "<a href=\"".$a. "\">".$linktext. "</a>".$b;
      }
    return($s);
Avatar billede nephilim Nybegynder
25. januar 2002 - 05:00 #3
undskyld, alle $a skulle have været $string
Avatar billede nephilim Nybegynder
25. januar 2002 - 05:01 #4
og der er et } for meget... æv jeg ville gerne kunne se mere kode i vinduet når jeg skriver
Avatar billede nephilim Nybegynder
25. januar 2002 - 05:03 #5
Avatar billede festhest Nybegynder
25. januar 2002 - 16:39 #6
nephilim, din funktion virker ikke rigtig... laver hele string til link
Avatar billede el-prebsi Nybegynder
25. januar 2002 - 16:43 #7
if (substr_count($besked,'http://') != '') {
      $laengde = strpos($besked,'http://');
      $resten = substr($besked,$laengde,strlen($besked));
      if (strpos($resten,'(') != '') {
        $laengde = strpos($resten,'(');
        $resten = substr($resten,0,$laengde);
      }
      $besked = str_replace($resten,"<a href="$resten" class=speciel target=_blank>$resten</a>",$besked);
    }

$string er her erstattet med $besked - går ud fra det er en tagwall eller lignende
det burde virke.
så kan du jo erstatte http:// med www. så folk selv kan vælge om de vil bruge http:// eller www.
Avatar billede el-prebsi Nybegynder
25. januar 2002 - 16:43 #8
Det var jo et svar:


if (substr_count($besked,'http://') != '') {
      $laengde = strpos($besked,'http://');
      $resten = substr($besked,$laengde,strlen($besked));
      if (strpos($resten,'(') != '') {
        $laengde = strpos($resten,'(');
        $resten = substr($resten,0,$laengde);
      }
      $besked = str_replace($resten,"<a href="$resten" class=speciel target=_blank>$resten</a>",$besked);
    }

$string er her erstattet med $besked - går ud fra det er en tagwall eller lignende
det burde virke.
så kan du jo erstatte http:// med www. så folk selv kan vælge om de vil bruge http:// eller www.
Avatar billede festhest Nybegynder
25. januar 2002 - 16:44 #9
Rune, der er følgende regler:
1. "http://" skal indgå i det brugeren indtaster
2. Det der skal stå som linktext skal være mellem 2 paranteser()
eks.:
$string = "blablabla blabla http:www.google.com(En søge maskine) blablabla bla.

$ny_string = "blablabla blabla <a href='http:www.google.com'>En god søgemaskine</a> blablabla bla.
Avatar billede el-prebsi Nybegynder
25. januar 2002 - 16:45 #10
nej, det gør faktisk ikke det i parantes til link-teksten - to sekunder-..
Avatar billede festhest Nybegynder
25. januar 2002 - 16:50 #11
jeg kan slet ikke få det til at virke
Avatar billede el-prebsi Nybegynder
25. januar 2002 - 16:57 #12
Det her medtager godt nok parantesen, men jeg skal lige se lidt nærmere på det, men det virker da...

<?
  if (substr_count($besked,'http://') != '') {
    $laengde = strpos($besked,'http://');
    $resten = substr($besked,$laengde,strlen($besked));
    if (strpos($resten,'(') != '') {
      $laengde = strpos($resten,'(');
      $resten = substr($resten,0,$laengde);
    }

    $laengde = strpos($besked,'(');
    $resten2 = substr($besked, $laengde, strlen($besked));
    if (strpos($resten2,')') != '') {
      $laengde = strpos($resten2,')');
      $resten2 = substr($resten2,0,$laengde);
    }

    $besked = str_replace($resten,"<a href=\"$resten\" class=speciel target=_blank>",$besked);

    $besked = str_replace($resten2,"$resten2</a>",$besked);
   
  }



  echo($besked);
?>
Avatar billede el-prebsi Nybegynder
25. januar 2002 - 17:10 #13
Så virker det uden at paranteserne kommer med:


<?
  if (substr_count($besked,'http://') != '') {
    $laengde = strpos($besked,'http://');
    $resten = substr($besked,$laengde,strlen($besked));
    if (strpos($resten,'(') != '') {
      $laengde = strpos($resten,'(');
      $resten = substr($resten,0,$laengde);
    }

    $laengde = strpos($besked,'(');
    $resten2 = substr($besked, $laengde, strlen($besked));
    $resten3 = substr($resten2, 1, strlen($resten2)-2);
    if (strpos($resten3,')') != '') {
      $laengde = strpos($resten3,')');
      $resten3 = substr($resten3, 0, $laengde);
    }

    $besked = str_replace($resten,"<a href=\"$resten\" class=speciel target=_blank>",$besked);

    $besked = str_replace($resten2,"$resten3</a>",$besked);
   
  }

  echo($besked);
?>
Avatar billede festhest Nybegynder
26. januar 2002 - 15:17 #14
funktionen virker ikke. Den laver også al tekst der står efter ")" til linktext. Og hvis jeg har en lang streng med flere urls fungerer den heller ikke.
Avatar billede festhest Nybegynder
27. januar 2002 - 01:50 #15
Hvis der er nogen der kan lave det vha. ereg_replace, preg_replace eller lign. vil jeg godt give 100 point ekstra.
Avatar billede festhest Nybegynder
27. januar 2002 - 03:00 #16
nå, jeg fandt selv en løsning, men hvis der er nogen der har et bedre forslag vil jeg godt acceptere et svar

her er funktionen:

$text = "bblabla bla http://www.google.com{(En søgemaskine)} blablabla http://www.jubii.dk{(Et katelog)} blablab bla.";

function func_makelink($text)
{
$text = eregi_replace("[[:alpha:]]+:[^()<>[:space:]]+[[:alnum:]/]", "<a href='\\0'>", $text);
$text = eregi_replace("\)\}", "</a>", $text);
$text = eregi_replace("\{\(", "", $text);
return $text; 
}
Avatar billede sepelio Nybegynder
08. juni 2003 - 19:41 #17
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