Zajmuje sie obecnie ticketem: http://redmine.boduch.net/issues/214
Chodzi o to, ze gdy umieszcze w poscie adres URL - http://4programmers.net
to jest on w momencie parsowania wiadomosci - zamieniany na znacznik <a>
- http://4programmers.net
Problem pojawia sie w momencie, gdy na koncu linka znajduje sie nawias zamykajacy: http://pl.wikipedia.org/wiki/Wymiar_(matematyka) Nie jest on uwzgledniany w URLu. Niby jest to dzialanie pozadane, gdyz czesto zdarza sie ze podajemy adres w nawiasie (Delphi) i nie chce, aby nawias zamykajacy byl traktowany jako czesc URL-a.
Jednak, w momencie, gdy w URLu znajduje sie nawias otwierajacy, to ten zamykajacy tez powinien byc uwzgledniany. Jak to ugryzc?
Kod odpowiadajacy za transformacje linkow wyglada tak:
/**
* Przeksztalca odnisniki w tekscie w dzialajace tagi (x)HTML
* @param string $text Tekst do transformacji
* @param int $limit Limit dlugosci URLa (dluzsze URL'e beda "przyciete" [nie w atrybucie href!])
* @return string
*/
public static function transformUrl($text, $limit = false)
{
/*
* Wyrazenia regularne z projektu Kohana
*/
//linki z protokolem [np. http://cos.pl, ftp://cos.pl]
$patterns[] = '~\b(?<!href="|">)(?:ht|f)tps?://\S+(?:/|\b)~ie';
$replacements[] = "'<a href=\"$0\">' . self::limitUrl('$0', $limit) . '</a>'";
//linki bez protokolu, z 'www' na poczatku
$patterns[] = '~\b(?<!://|">)www(?:\.[a-z0-9][-a-z0-9]*+)+\.[a-z]{2,6}\b~ie';
$replacements[] = "'<a href=\"http://$0\">' . self::limitUrl('$0', $limit) . '</a>'";
return preg_replace($patterns, $replacements, $text);
}