Avatar billede Slettet bruger
09. maj 2003 - 14:55 Der er 6 kommentarer og
3 løsninger

hjælp til ereg replace

Hej eksperter.

Jeg sidder og er ved at sætte noget nyhedssystem op.
Når man poster et indlæg skal den naturligvis kunne finde ud af at et www.exp.dk er en url og lave det til et link.

Det fungere også fint. Mit problem er at hvis min url er meget lang så kan den ikke finde ud af det, og gør kun noget af teksten til et link, og det dur jo ikke. Et eksempel kunne være:

http://australianit.news.com.au/articles/0,7204,6400741%5E15318%5E%5Enbv%5E15306,00.html

min kode ser sådan ud:

$nyhedx[$t]=ereg_replace("http://([a-z0-9\-])*(\.([a-z0-9\-]+))*(([a-z0-9/])*)?(\.([a-z0-9\-]+))*(\?([a-z0-9]+))?(\=([a-z0-9]+))?((\&([a-z0-9]+))(\=([a-z0-9]+))?)*((\.([a-z]){3,4})?){1}(((\&([a-z0-9]+))(\=([a-z0-9]+))?)*((\.([a-z]){3,4})?){1})*","<a href=\"\\0\" target=\"_blank\">\\0</a>",$nyhedx[$t]);

Nogen der eventuelt har et bud på hvad der kan gøres?
Avatar billede exp Juniormester
09. maj 2003 - 15:00 #1
Hvis det er noget du selv sidder og fifler med for at lære det, kan jeg ikke hjælpe...

Men hvis du skal bruge noget der virker, så kan du kigge her:
http://www.ljweb.com/?Ref=usefulscripts
Avatar billede postndk Nybegynder
09. maj 2003 - 15:08 #2
$str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);

taget fra ljweb.com
Avatar billede Slettet bruger
09. maj 2003 - 15:56 #3
Hmm.. så langt så godt. Det fungerede fint med http osv.
Så vil jeg jo også gerne have implanteret www så det også fungere.
Men det vil ikke helt som jeg vil. Min kode ser nu sådan ud:

if((eregi("http://",$nyhed))or(eregi("www.",$nyhed))){
$nyhedx=explode(" ",$nyhed);
for($t=0;$t<count($nyhedx);$t++){
if(eregi("http://",$nyhedx[$t]))
 
  $nyhedx[$t]=preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $nyhedx[$t]);

else

$nyhedx[$t] = ereg_replace("www\.([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$ins_str.">\\2\\3</a>",$nyhedx[$t]);
}
$nyhed=$nyhedt;
}
$nyhed = eregi_replace("(([a-z0-9\.\-_])*)@((([a-z0-9\-])+)\.((([a-z0-9\-\.])+))?([a-z]){2,3}|([0-9\.]*)?)",
"<a href=\"mailto:\\0\" onfocus=\"blur()\" target=\"_blank\">\\0</a>",$nyhed);
Avatar billede Slettet bruger
09. maj 2003 - 16:55 #4
hmm.. scriptet på www.ljweb.com fungere jo fint.
Men kan man ikke på en eller anden smart måde inkludere det.
Avatar billede schaefner Juniormester
09. maj 2003 - 16:57 #5
include("tagster_lib.php");
$tekst = tagster_format($tekst, "_blank", "mystyle");
Avatar billede Slettet bruger
09. maj 2003 - 17:03 #6
jeps. Det har jeg læst mig til.
Mit problem er at jeg har en variabel $nyheder = $_POST[nyhed];

Og det er den $nyhed den gerne skulle kigge det igennem efter.
Jeg syntes bare ikke helt jeg kan få det til at fungere optimalt :/
Avatar billede Slettet bruger
09. maj 2003 - 17:15 #7
Jeg har forhøjet antallet af points.
Det vil ikke fungere. Min kode ser sådan ud. Og mit sidste forsøg kan ses heri.

if($_POST[add_nyhed]) {
      $connection = mysql_connect("localhost","***","***");
    mysql_select_db("news", $connection);
               
        $overskrift = $_POST[overskrift];
        $nyhed = addslashes($_POST[nyhed]);
        $dato = $_POST[dato];
        $måned = $_POST[måned];
       
include("tagster_lib.php");
$nyhedx=explode(" ",$nyhed);
$nyhedx = tagster_format($nyhedx, "_blank", "mystyle");


 
       
        $addnyhed = mysql_query("insert into nyheder (overskrift, nyhed, dato, måned)
    VALUES ('$overskrift','$nyhed','$dato','$måned')");
       
        if($addnyhed) {
            echo "Nyheden er nu tilføjet.";
        }
       
        else {
            echo "Fejl: ".mysql_error();
        }
    }
Avatar billede Slettet bruger
09. maj 2003 - 17:52 #8
okay. Jeg fik selv styr på det til sidst :)

jeg slettede simpelthen alt, så den bare smider ren tekst i databasen, og så på siden hvor nyhederne skal vises lagde jeg følgende 2 funktioner ind.

function url2link ($str) {
  $str = preg_replace("/((ht|f)tp:\/\/)[\w.-]+(?(?=\/)[^\s<>]+)/i", "<a href=\"\\0\">\\0</a>", $str);
  $str = preg_replace("/(?<!http:\/\/)(www\.)[\w.-]+(?(?=\/)[^\s<>]+)/i", "<a href=\"http://\\0\">\\0</a>", $str);
  return $str;
}

function email2link ($str) {
  return preg_replace("/[\w.-]+@[\w-]+\.[\w.-]+/i", "<a href=\"mailto:\\0\">\\0</a>", $str);
}
Avatar billede Slettet bruger
09. maj 2003 - 17:55 #9
jeg hev selv nogle af de points jeg smed i som en ekstra ting tilbage til mig selv. OG i fik så begge det antal points der var lovet.
Mere fair vil jeg ikke sige det kan være :D

tak for hjælpen.
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