summaryrefslogtreecommitdiffstats
path: root/web/lib
diff options
context:
space:
mode:
authorLukas Fleischer <archlinux@cryptocrack.de>2010-10-03 21:51:45 +0200
committerLukas Fleischer <archlinux@cryptocrack.de>2011-01-19 21:18:45 +0100
commit60edcd04e52323050792252009512f7592f3b66c (patch)
tree686e2ed1ea9999fa2bbcdeb71a9edc29cd224b6a /web/lib
parenta417224988b0bbf16163c5e28fa4ca586ff2d707 (diff)
downloadaur-60edcd04e52323050792252009512f7592f3b66c.tar.gz
aur-60edcd04e52323050792252009512f7592f3b66c.tar.xz
Make external links in comments clickable (FS#20137).
Comments are now split at link boundaries and links are converted separately. I find this to be a much cleaner way than re-converting comments that have already been converted using htmlspecialchars(). This also doesn't require any callback procedure. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Diffstat (limited to 'web/lib')
-rw-r--r--web/lib/aur.inc24
1 files changed, 24 insertions, 0 deletions
diff --git a/web/lib/aur.inc b/web/lib/aur.inc
index bd69c4c0..a6292caa 100644
--- a/web/lib/aur.inc
+++ b/web/lib/aur.inc
@@ -494,3 +494,27 @@ function salted_hash($passwd, $salt)
}
return md5($salt . $passwd);
}
+
+function parse_comment($comment)
+{
+ $url_pattern = '/(\b(?:https?|ftp):\/\/[\w\/\#~:.?+=&%@!\-;,]+?' .
+ '(?=[.:?\-;,]*(?:[^\w\/\#~:.?+=&%@!\-;,]|$)))/iS';
+
+ $matches = preg_split($url_pattern, $comment, -1,
+ PREG_SPLIT_DELIM_CAPTURE);
+
+ $html = '';
+ for ($i = 0; $i < count($matches); $i++) {
+ if ($i % 2) {
+ # convert links
+ $html .= '<a href="' . htmlspecialchars($matches[$i]) .
+ '">' . htmlspecialchars($matches[$i]) . '</a>';
+ }
+ else {
+ # convert everything else
+ $html .= nl2br(htmlspecialchars($matches[$i]));
+ }
+ }
+
+ return $html;
+}