Problém s kombinací automatických přepisů textu na kód ...

Opět zdravím, už tady začínám být jako doma :-)

Tentokrát se mi jedná o to, že mi leze nějáký text z formuláře z pole textarea a já potřebuju, aby nejprve změnil konce řádků na tag <br /> a následně aby mi ze všech URL udělal odkazy a z mejlu odkaz mailto:

(na pořadí operací mi nezáleží, zkoušel jsem obě varianty a s totožným výsledkem... U toho mailto: teď neřeším bezpečnost na harvestry mejlových adres, to si kdyžtak upravím, teď mi jde o názornost)

Vše je OK, dokud se nestane, že (dělá to jenom mejl, nic jinýho) původní text mailové adresy začíná na novém řádku. Pak to udělá viz. http://izdarma.unas.cz/pokus.php

kód vypadá takhle (mám tam přidanou pevnou definici proměnné, opět záměrně pro názornost)

<?php
$textstary = $_POST['obsah'];
$textstary = "www.rabamusic.cz, izdarma@seznam.cz, http://inzercezdarma.wz.cz<br />izdarma@seznam.cz";
$textsodkazy = preg_replace('#(http://|ftp://|(www\.))([\w\-]*\.[\w\-\.]*([/?][^\s]*)?)|((mailto:)?([^\s]+@[\w\-]+\.[\w]+))#e',"'<a href=\"'.('\\1'=='www.'?'http://':'\\1').('\\7'!=''?'mailto:':'').str_replace('@','@','\\2\\3\\7').'\">'.str_replace('@','@',((strlen('\\2\\3\\7')>23)?(substr('\\2\\3\\7',0,20).'…'):'\\2\\3\\7')).'</a>'",$textstary);
$text = nl2br($textsodkazy);
echo "$text";
?>


A teď zaboha nemůžu přijít na to, jak tenhle bug odstranit, abych zase nepo... :-) něco jiného, co na tom teď už funguje.
Přijde mi to trochu kostrbaté, ale mělo by stačít prohodit pořadí provádění funkcí nl2br() a preg_replace().

Ten regulární výraz je opravdu docela zběsilý. Například [^\s] lze nahradit \S. A když to vidím.., nebylo by lepší (zejména kvůli hledání chyb) rozdělit zpracování adres a e-mailů do samostatných preg_replace() funkcí?
___
Na výpis jedné proměnné se nepoužívají uvozovky. Pro parser je lepší použít jenom echo $text; ;)
Díky. Já jsem taky kus vola. Už jsem začal ze zoufalství zkoušet nahrazovat přes str_replace "vadné" části kódu (2 kusy) správnými, až mi docvaklo, že když jsem to začal tvořit, tak jsem tam neměl funkci

$text = nl2br($textsodkazy);

a proto jsem si do ručního zadání proměnné vložil tag <br />, ze kterého si to vzalo do zápisu odkazu to /> a řádek se zalomil jen nějákým zázrakem jen s <br

Samozřejmě jsem tím vytvořil paradox, který mi tam sice může udělat i uživatel, ale to už je jeho mínus :-D

Díky za podporu ;-)