Jak wiemy, automagiczne wyłapywanie adresów nie zawsze działa dobrze.
Przykład:
> jakiś adres http://adres.pierwszy.pl/strona.php hehe, dobre
Jeśli w dodatku link będzie na końcu posta, rozwala całą stopkę...
Za wyłapywanie adresów odpowiada funkcja url() w pliku parser.php.
Jest tam 5 wyrażeń regularnych, z czego 4 odpowiadają za URL.
Nie analizując ich, napisałem całkiem nowe wyrażenie, które radzi sobie dobrze.. prawie.. stąd ten post.
Problemem jest funkcja strip_html() wywoływana przed url(). Niestety, wywołanie jej po url() sprawi, że zobaczymy znaczniki jako tekst zamiast linków.
Moja wersja zastępująca 4 obecne wyrażenia:
$patterns[] = "@\b(?<!<image>|<url>|<url=|href=\")(?:(http(?:s)?://|ftp://)|(www\.))([a-z0-9_-]+
(?:(?:/|\.)[][(){}^/$,?+#*:;%~=&a-z0-9ęóąśłżźćńĘÓĄŚŁŻŹĆŃ_-]+)+)@ie";
$replacements[] = "'<a href=\"' . ('\\1' == ''?'http://\\2':'\\1') . '\\3\">' . cut_url('\\1\\2\\3', 70) . '</a>'";
[dodałem enter w wyrażeniu aby nie rozwalało strony]