diff --git a/modules/markup/markdown/goldmark.go b/modules/markup/markdown/goldmark.go index a1c8e1ded0..a9475b58c5 100644 --- a/modules/markup/markdown/goldmark.go +++ b/modules/markup/markdown/goldmark.go @@ -52,7 +52,6 @@ func (g *GiteaASTTransformer) Transform(node *ast.Document, reader text.Reader, lnk := string(link) lnk = giteautil.URLJoin(prefix, lnk) - lnk = strings.Replace(lnk, " ", "+", -1) link = []byte(lnk) } v.Destination = link diff --git a/modules/markup/markup.go b/modules/markup/markup.go index 008b21ab97..f8deb2b29b 100644 --- a/modules/markup/markup.go +++ b/modules/markup/markup.go @@ -81,7 +81,6 @@ func RenderWiki(filename string, rawBytes []byte, urlPrefix string, metas map[st } func render(parser Parser, rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { - urlPrefix = strings.Replace(urlPrefix, " ", "+", -1) result := parser.Render(rawBytes, urlPrefix, metas, isWiki) // TODO: one day the error should be returned. result, err := PostProcess(result, urlPrefix, metas, isWiki) diff --git a/modules/util/url.go b/modules/util/url.go index 263255fcd3..1acd713766 100644 --- a/modules/util/url.go +++ b/modules/util/url.go @@ -25,6 +25,9 @@ func PathEscapeSegments(path string) string { // URLJoin joins url components, like path.Join, but preserving contents func URLJoin(base string, elems ...string) string { + // We do need to escape special chars here or else they can be silently discarded + // in the ResolveReference call below + base = PathEscapeSegments(base) if !strings.HasSuffix(base, "/") { base += "/" }