Parse URL's in text, create links

I’m absolutely in love with the status update stream I’ve put together for Fwd:Vault (follow link for example). However in the process, I’ve discovered a huge drawback to the Twitter messaging system: it does not store links. The Twitter site itself will identify URL’s in messages and convert them into clickable links for you automatically. But the magic ends at Twitter’s borders; anyone who wants to do the same on their site is on their own. So I consulted the almighty Google. I found plenty of raw regex, javascript, and Twitter-focused discussions on the matter, but I found the offered solutions and tips lacking. I wanted to do this up right, transparently via PHP in the background. No JS required. Finally, I found a small PHP script that accomplished what I needed. Here’s a renamed version—all code intact—that will find and convert any well-formed URL into a clickable <a> tag link. Update: My buddy Tonk has updated the code to link up @replies and #hashtags as well. He also switched from POSIX to Perl regular expressions syntax, mostly cause he’s a regex dork.lang="php"> function linkify( $text ) {

$text = preg_replace( '/(?!<\S)(\w+:\/\/[^<>\s]+\w)(?!\S)/i', '$1', $text );

$text = preg_replace( '/(?!<\S)#(\w+\w)(?!\S)/i', '#$1', $text );

$text = preg_replace( '/(?!<\S)@(\w+\w)(?!\S)/i', '@$1', $text );

return $text;

}


Copy that into your code, then run your text containing unlinked URL's through it. Let's apply it to the Twitter feed example as we left it in <a href="/2008/11/easily-calculate-dates-and-times-in-different-timezones">Step 2</a>:
<pre lang="php">
* <?php echo linkify($status->text) . '
' . $time_display; ?>

You can find this code at work on Fwd:Vault. Build a slick Twitter feed on your site

    * Display Twitter updates on your website * Calculate dates and times in different timezones (translate Twitter timestamps)
  1. Parse URL’s in text, create links