+ function parseUrl (&$body)
+ {
+ global $url_parser_poss_ends, $url_parser_url_tokens;;
+ $start = 0;
+ $target_pos = strlen($body);
+
+ while ($start != $target_pos)
+ {
+ $target_token = '';
+
+ // Find the first token to replace
+ foreach ($url_parser_url_tokens as $the_token)
+ {
+ $pos = strpos(strtolower($body), $the_token, $start);
+ if (is_int($pos) && $pos < $target_pos)
+ {
+ $target_pos = $pos;
+ $target_token = $the_token;
+ }
+ }
+
+ // Look for email addresses between $start and $target_pos
+ $check_str = substr($body, $start, $target_pos);
+
+ if (parseEmail($check_str))
+ {
+ replaceBlock($body, $check_str, $start, $target_pos);
+ $target_pos = strlen($check_str) + $start;
+ }
+
+ // If there was a token to replace, replace it
+ if ($target_token != '')
+ {
+ // Find the end of the URL
+ $end=strlen($body);
+ foreach ($url_parser_poss_ends as $key => $val)
+ {
+ $enda = strpos($body,$val,$target_pos);
+ if (is_int($enda) && $enda < $end)
+ $end = $enda;
+ }
+
+ // Extract URL
+ $url = substr($body, $target_pos, $end-$target_pos);
+
+ // Replace URL with HyperLinked Url, requires 1 char in link
+ if ($url != '' && $url != $target_token)
+ {
+ $url_str = "<a href=\"$url\" target=\"_blank\">$url</a>";
+ replaceBlock($body,$url_str,$target_pos,$end);
+ $target_pos += strlen($url_str);
+ }
+ else
+ {
+ // Not quite a valid link, skip ahead to next chance
+ $target_pos += strlen($target_token);
+ }
+ }
+
+ // Move forward
+ $start = $target_pos;
+ $target_pos = strlen($body);
+ }
+ }
+
+?>