diff options
author | Lukas Fleischer <archlinux@cryptocrack.de> | 2010-10-03 21:51:45 +0200 |
---|---|---|
committer | Lukas Fleischer <archlinux@cryptocrack.de> | 2011-01-19 21:18:45 +0100 |
commit | 60edcd04e52323050792252009512f7592f3b66c (patch) | |
tree | 686e2ed1ea9999fa2bbcdeb71a9edc29cd224b6a | |
parent | a417224988b0bbf16163c5e28fa4ca586ff2d707 (diff) | |
download | aurweb-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>
-rw-r--r-- | web/lib/aur.inc | 24 | ||||
-rw-r--r-- | web/template/pkg_comments.php | 2 |
2 files changed, 25 insertions, 1 deletions
diff --git a/web/lib/aur.inc b/web/lib/aur.inc index bd69c4c..a6292ca 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; +} diff --git a/web/template/pkg_comments.php b/web/template/pkg_comments.php index e4a9da1..dce3a17 100644 --- a/web/template/pkg_comments.php +++ b/web/template/pkg_comments.php @@ -25,7 +25,7 @@ while (list($indx, $carr) = each($comments)) { ?> ?></div> <blockquote class="comment-body"> <div> -<?php echo nl2br(htmlspecialchars($carr['Comments'])) ?> +<?php echo parse_comment($carr['Comments']) ?> </div> </blockquote> <?php |