diff --git a/src/main/scala/gitbucket/core/view/helpers.scala b/src/main/scala/gitbucket/core/view/helpers.scala
index b61c0d6..e8e8760 100644
--- a/src/main/scala/gitbucket/core/view/helpers.scala
+++ b/src/main/scala/gitbucket/core/view/helpers.scala
@@ -9,7 +9,7 @@
import gitbucket.core.service.{RepositoryService, RequestCache}
import gitbucket.core.util.{FileUtil, JGitUtil, StringUtil}
-import play.twirl.api.Html
+import play.twirl.api.{Html, HtmlFormat}
/**
* Provides helper methods for Twirl templates.
@@ -306,6 +306,17 @@
private[this] val detectAndRenderLinksRegex = """(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,13}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))""".r
def detectAndRenderLinks(text: String): Html = {
- Html(detectAndRenderLinksRegex.replaceAllIn(text, m => s"""${m.group(0)}"""))
+ val matches = detectAndRenderLinksRegex.findAllMatchIn(text).toVector
+ var pos = 0
+ var out = Vector.empty[Html]
+ for (m <- matches) {
+ if (pos < m.start) out :+= HtmlFormat.escape(text.substring(pos, m.start))
+ val url = m.group(0)
+ val href = url.replace("\"", """)
+ out :+= Html(s"""${url}""")
+ pos = m.end
+ }
+ if (pos < text.length) out :+= HtmlFormat.escape(text.substring(pos))
+ HtmlFormat.fill(out)
}
}