Przy okazji ostatniego projektu natknąłem się na problem zmiany linków w tweetach pobieranych z API Twittera. Jak wiadomo API zwraca tweety w plain text, czyli bez żadnych znaczników HTML.
Z pomocą przychodzą wyrażenia regularne zawarte w funkcji twitterify(), którą znalazłem w czeluściach internetu. Niestety do rzeczywistego autora funkcji nie udało mi się dokopać.
Funkcja czterokrotnie przepuszcza podany ciąg znaków przez preg_replace(), który szuka w tekście ciągu o podanym schemacie (wyrażenie regularne) i zamienia ten ciąg na inny.
Z twitterify() zmienimy:
- wszystkie linki na klikalne odnośniki
- ciągi zaczynające się od @ na linki do profilu
- ciągi zaczynające się od # na linki do wyszukiwania po hashtagu
A oto wspomniana funkcja.
function twitterify( $ret ) {
$ret = preg_replace( "#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret );
$ret = preg_replace( "#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret );
$ret = preg_replace( "/@(\w+)/", "<a href=\"http://www.twitter.com/\\1\" target=\"_blank\">@\\1</a>", $ret );
$ret = preg_replace( "/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $ret );
return $ret;
}