<?php
function twitterify($ret) {
//
// Replace all text that precedes a URL with an HTML anchor
// that hyperlinks the URL and shows the preceding text as
// the anchor text.
//
// e.g., "hello world www.test.com" becomes
// <a href="www.test.com" target="_blank">hello world</a>
//
$ret = preg_replace("#(.*?)(http://)?(www\.[^ \"\t\n\r<]+)#", "<a href=\"http://\\3\" target=\"_blank\">\\1</a>", $ret);
// if anchor text is empty, insert anchor's href
$ret = preg_replace("#(<a href=\"(\w+://)?([^\"]+)\"[^>]+>)(</a>)#", "\\1\\3\\4", $ret);
$ret = preg_replace("/@(\w+)/", "<a href=\"http://w...content-available-to-author-only...r.com/\\1\" target=\"_blank\">@\\1</a>", $ret); $ret = preg_replace("/#(\w+)/", "<a href=\"http://s...content-available-to-author-only...r.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $ret); return $ret;
}
function test($str) {
print "INPUT: \"" . $str . "\"\nOUTPUT: " . twitterify($str) . "\n\n";
}
// tests
test("www.foo.com");
test("www.foo.com fox");
test("www.test.com fox jumped over www.foo.com");
test("fox jumped over www.test.com the fence www.foo.com");
?>
PD9waHAKZnVuY3Rpb24gdHdpdHRlcmlmeSgkcmV0KSB7CiAgLy8KICAvLyBSZXBsYWNlIGFsbCB0ZXh0IHRoYXQgcHJlY2VkZXMgYSBVUkwgd2l0aCBhbiBIVE1MIGFuY2hvcgogIC8vIHRoYXQgaHlwZXJsaW5rcyB0aGUgVVJMIGFuZCBzaG93cyB0aGUgcHJlY2VkaW5nIHRleHQgYXMKICAvLyB0aGUgYW5jaG9yIHRleHQuCiAgLy8gCiAgLy8gZS5nLiwgImhlbGxvIHdvcmxkIHd3dy50ZXN0LmNvbSIgYmVjb21lcwogIC8vIDxhIGhyZWY9Ind3dy50ZXN0LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmhlbGxvIHdvcmxkPC9hPgogIC8vCiAgJHJldCA9IHByZWdfcmVwbGFjZSgiIyguKj8pKGh0dHA6Ly8pPyh3d3dcLlteIFwiXHRcblxyPF0rKSMiLCAiPGEgaHJlZj1cImh0dHA6Ly9cXDNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cXDE8L2E+IiwgJHJldCk7CgogIC8vIGlmIGFuY2hvciB0ZXh0IGlzIGVtcHR5LCBpbnNlcnQgYW5jaG9yJ3MgaHJlZgogICRyZXQgPSBwcmVnX3JlcGxhY2UoIiMoPGEgaHJlZj1cIihcdys6Ly8pPyhbXlwiXSspXCJbXj5dKz4pKDwvYT4pIyIsICJcXDFcXDNcXDQiLCAkcmV0KTsKCiAgJHJldCA9IHByZWdfcmVwbGFjZSgiL0AoXHcrKS8iLCAiPGEgaHJlZj1cImh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLmNvbS9cXDFcIiB0YXJnZXQ9XCJfYmxhbmtcIj5AXFwxPC9hPiIsICRyZXQpOwogICRyZXQgPSBwcmVnX3JlcGxhY2UoIi8jKFx3KykvIiwgIjxhIGhyZWY9XCJodHRwOi8vcy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uci5jb20vc2VhcmNoP3E9XFwxXCIgdGFyZ2V0PVwiX2JsYW5rXCI+I1xcMTwvYT4iLCAkcmV0KTsKICByZXR1cm4gJHJldDsKfQoKZnVuY3Rpb24gdGVzdCgkc3RyKSB7CiAgcHJpbnQgIklOUFVUOiAgXCIiIC4gJHN0ciAuICJcIlxuT1VUUFVUOiAiIC4gdHdpdHRlcmlmeSgkc3RyKSAuICJcblxuIjsKfQovLyB0ZXN0cwp0ZXN0KCJ3d3cuZm9vLmNvbSIpOwp0ZXN0KCJ3d3cuZm9vLmNvbSAgZm94Iik7CnRlc3QoInd3dy50ZXN0LmNvbSAgZm94IGp1bXBlZCBvdmVyICB3d3cuZm9vLmNvbSIpOwp0ZXN0KCJmb3gganVtcGVkIG92ZXIgIHd3dy50ZXN0LmNvbSAgIHRoZSBmZW5jZSAgIHd3dy5mb28uY29tIik7Cj8+