Avatar billede mr_bambi Nybegynder
28. april 2003 - 21:17 Der er 1 kommentar og
1 løsning

Bibehold linieskift ifm. preg_replace i PHP

Jeg har følgende kode, der skal danne a-links ud fra et givent stykke tekst, der oftest er på flere linier.

$str = preg_replace("/(\s)+((ht|f)tp:\/\/[^\s]+)(\s|$)+/i", "\\1<a href=\"\\2\" target=\"_top\">\\2</a>\\4", $str);
$str = preg_replace("/(\s)+(www\.[^\s]+)(\s|$)+/i", "\\1<a href=\"http://\\2\" target=\"_top\">\\2</a>\\3", $str);
$str = preg_replace("/(\s)+([a-z0-9_.-]+@[a-z0-9.-]+)(\s|$)+/i", "\\1<a href=\"mailto:\\2\">\\2</a>\\3", $str);

Den skal så fx lave følgende tekststykke om:
------------------------
"Hej,
Dette er en test af, hvorvidt makeClickable($str) fucker denne teksts linieskift op. Herefter er dobbelt newline-linieskift


www.eksperten.dk
www.sharksforum.com

(der er enkelt linieskift FØR og EFTER denne linie)

Held og lykke med fejlsøgningen"
------------------------

Men når jeg parser den igennem ovenstående kode, så sætter den et ekstra linieskift ind efter www.eksperten.dk, som den godt nok laver om til et link, men så er der jo en blank linie mellem de to webadresser, og ikke nok med det - den laver heller ikke www.sharksforum.com om til et link.
I andre situationer fjerner den dobbelt linieskift før og efter links, osv.

Er der nogen, der kan fortælle mig, hvad det er, der går galt med behandlingen af linieskift i koden?

Mvh
Bjørn Amdi Sloth

P.S.: Koden er noget jeg har sakset, og jeg FORSTÅR den ikke særligt godt, så hvis det kan simplificeres lidt, så ville jeg blive glad ;-)
Avatar billede schaefner Juniormester
30. april 2003 - 17:11 #1
Burde virke:

$str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\" target=\"_top\">\\1://\\2</a>", $str);
$str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\" target=\"_top\">\\2\\3</a>", $str);
$str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\" target=\"_top\">\\2\\3</a>", $str);
$str = preg_replace ("/([\s\"])([\w\.\-_]+)@([\w\-_]+)\.([\w\.\-_]+)/i", "\\1<a href=\"mailto:\\2@\\3.\\4\">\\2@\\3.\\4</a>", $str);

Iøvrigt taget fra www.ljweb.com
Avatar billede mr_bambi Nybegynder
30. april 2003 - 23:20 #2
Ja, det virker da i hvert fald nu.
Tak for det.

Tjek forresten mit nye spm: http://www.eksperten.dk/spm/346961

Mvh
/Bjørn Amdi Sloth
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