From e2cbb1b9ca6fcdd060845001ea0e524295712961 Mon Sep 17 00:00:00 2001
From: e107steved <steved@e107.org>
Date: Sat, 1 Nov 2008 18:00:36 +0000
Subject: [PATCH] Bugtracker #4560 - fix regex for link substitution (and no
 doubt break something else)

---
 e107_handlers/e_parse_class.php | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/e107_handlers/e_parse_class.php b/e107_handlers/e_parse_class.php
index 675b32c99..193faa0fb 100644
--- a/e107_handlers/e_parse_class.php
+++ b/e107_handlers/e_parse_class.php
@@ -11,8 +11,8 @@
 |     GNU General Public License (http://gnu.org).
 |
 |     $Source: /cvs_backup/e107_0.8/e107_handlers/e_parse_class.php,v $
-|     $Revision: 1.39 $
-|     $Date: 2008-10-30 22:42:36 $
+|     $Revision: 1.40 $
+|     $Date: 2008-11-01 18:00:30 $
 |     $Author: e107steved $
 +----------------------------------------------------------------------------+
 */
@@ -703,8 +703,10 @@ class e_parse
 				if ($pref['link_replace'] && !$opts['no_replace'])
 				{
 				  $_ext = ($pref['links_new_window'] ? " rel=\"external\"" : "");
-				  $sub_blk = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<,]*)#is", "\\1<a href=\"\\2\" {$_ext}>".$pref['link_text']."</a>", $sub_blk);
-				  $sub_blk = preg_replace("#(^|[\n \]])((www|ftp)\.[\w+-]+?\.[\w+\-.]*(?(?=/)(/.+?(?=\s|,\s))|(?=\W)))#is", "\\1<a href=\"http://\\2\" {$_ext}>".$pref['link_text']."</a>", $sub_blk);
+//				  $sub_blk = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<,]*)#is", "\\1<a href=\"\\2\" {$_ext}>".$pref['link_text']."</a>", $sub_blk);
+				  $sub_blk = preg_replace("#(^|[\s\]=])([\w]+?://(?:[\w-%]+?)(?:\.[\w-%]+?)+.*?)(?=$|[\s,()[\]]|\.\s)#is", "\\1<a href=\"\\2\" {$_ext}>".$pref['link_text']."</a>", $sub_blk);
+//				  $sub_blk = preg_replace("#(^|[\n \]])((www|ftp)\.[\w+-]+?\.[\w+\-.]*(?(?=/)(/.+?(?=\s|,\s))|(?=\W)))#is", "\\1<a href=\"http://\\2\" {$_ext}>".$pref['link_text']."</a>", $sub_blk);
+				  $sub_blk = preg_replace("#(^|[\s\]=])((?:www|ftp)(?:\.[\w-%]+?){2}.*?)(?=$|[\s,()[\]]|\.\s)#is", "\\1<a href=\"http://\\2\" {$_ext}>".$pref['link_text']."</a>", $sub_blk);
 				  if(CHARSET != "utf-8" && CHARSET != "UTF-8")
 				  {
 					$email_text = ($pref['email_text']) ? $this->replaceConstants($pref['email_text']) : "\\1\\2&copy;\\3";
@@ -717,8 +719,10 @@ class e_parse
 				}
 				else
 				{
-				  $sub_blk = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<,]*)#is", "\\1<a href=\"\\2\" rel=\"external\">\\2</a>", $sub_blk);
-				  $sub_blk = preg_replace("#(^|[\n \]])((www|ftp)\.[\w+-]+?\.[\w+\-.]*(?(?=/)(/.+?(?=\s|,\s))|(?=\W)))#is", "\\1<a href=\"http://\\2\" rel=\"external\">\\2</a>", $sub_blk);
+//				  $sub_blk = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<,]*)#is", "\\1<a href=\"\\2\" rel=\"external\">\\2</a>", $sub_blk);
+				  $sub_blk = preg_replace("#(^|[\s\]=])([\w]+?://(?:[\w-%]+?)(?:\.[\w-%]+?)+.*?)(?=$|[\s,()[\]]|\.\s)#is", "\\1<a href=\"\\2\" rel=\"external\">\\2</a>", $sub_blk);
+//				  $sub_blk = preg_replace("#(^|[\n \]])((www|ftp)\.[\w+-]+?\.[\w+\-.]*(?(?=/)(/.+?(?=\s|,\s))|(?=\W)))#is", "\\1<a href=\"http://\\2\" rel=\"external\">\\2</a>", $sub_blk);
+				  $sub_blk = preg_replace("#(^|[\s\]=])((?:www|ftp)(?:\.[\w-%]+?){2}.*?)(?=$|[\s,()[\]]|\.\s)#is", "\\1<a href=\"http://\\2\" rel=\"external\">\\2</a>", $sub_blk);
 				  $sub_blk = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a rel='external' href='javascript:window.location=\"mai\"+\"lto:\"+\"\\2\"+\"@\"+\"\\3\";self.close();' onmouseover='window.status=\"mai\"+\"lto:\"+\"\\2\"+\"@\"+\"\\3\"; return true;' onmouseout='window.status=\"\";return true;'>".LAN_EMAIL_SUBS."</a>", $sub_blk);
 				}
 			  }