URL-encode URI fields in the news feed.

Change-Id: I69ff4dfea602f17dbbdbd72366c7647aba00e105
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java b/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java
index 1fa7a26..035e47b 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/posts/PostResource.java
@@ -1,5 +1,6 @@
 package eu.mulk.mulkcms2.benki.posts;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
 import static javax.ws.rs.core.MediaType.APPLICATION_ATOM_XML;
 import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
 import static javax.ws.rs.core.MediaType.TEXT_HTML;
@@ -22,6 +23,7 @@
 import io.quarkus.security.identity.SecurityIdentity;
 import java.math.BigInteger;
 import java.net.URI;
+import java.net.URLEncoder;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
 import java.time.Instant;
@@ -67,8 +69,7 @@
   private static final DateTimeFormatter humanDateTimeFormatter =
       DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT);
 
-  private static final DateTimeFormatter htmlDateFormatter =
-      DateTimeFormatter.ISO_LOCAL_DATE;
+  private static final DateTimeFormatter htmlDateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
 
   private static final DateTimeFormatter humanDateFormatter =
       DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
@@ -260,10 +261,11 @@
     feed.setId(
         String.format(
             "tag:%s,2019:%s:%s:%s",
-            tagBase,
-            pageTitle,
-            feedSubId,
-            identity.isAnonymous() ? "world" : identity.getPrincipal().getName()));
+            URLEncoder.encode(tagBase, UTF_8),
+            URLEncoder.encode(pageTitle, UTF_8),
+            URLEncoder.encode(feedSubId, UTF_8),
+            URLEncoder.encode(
+                identity.isAnonymous() ? "world" : identity.getPrincipal().getName(), UTF_8)));
     feed.setUpdated(
         Date.from(
             posts.stream()
@@ -279,7 +281,10 @@
     feed.setOtherLinks(List.of(selfLink));
 
     var htmlAltLink = new Link();
-    var htmlAltPath = ownerName == null ? "/posts" : String.format("~%s/posts", ownerName);
+    var htmlAltPath =
+        ownerName == null
+            ? "/posts"
+            : String.format("~%s/posts", URLEncoder.encode(ownerName, UTF_8));
     htmlAltLink.setHref(uri.resolve(URI.create(htmlAltPath)).toString());
     htmlAltLink.setRel("alternate");
     htmlAltLink.setType("text/html");
@@ -291,7 +296,9 @@
                 post -> {
                   var entry = new Entry();
 
-                  entry.setId(String.format("tag:%s,2012:/marx/%d", tagBase, post.id));
+                  entry.setId(
+                      String.format(
+                          "tag:%s,2012:/marx/%d", URLEncoder.encode(tagBase, UTF_8), post.id));
                   if (post.date != null) {
                     entry.setPublished(Date.from(post.date.toInstant()));
                     entry.setUpdated(Date.from(post.date.toInstant()));