This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git

commit 5fee30eff297520b3cf94782f3830cb8d84ed21e
Author: Andy Seaborne <[email protected]>
AuthorDate: Mon Sep 2 18:42:16 2024 +0100

    Query and fragment endocde-decode
---
 .../src/main/java/org/apache/jena/atlas/lib/IRILib.java      | 12 +++++++++++-
 .../src/test/java/org/apache/jena/atlas/lib/TestIRILib.java  | 11 ++++++++---
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java 
b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
index bf886aa943..021d6d996f 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/IRILib.java
@@ -286,9 +286,19 @@ public class IRILib
      */
     public static String encodeUriQueryFrag(String string) {
         String encStr = StrUtils.encodeHex(string,'%', charsQueryFrag) ;
-        return encStr ;
+        // Space is special.
+        String encStr1 = encStr.replace("%20",  "+");
+        return encStr1 ;
+    }
+
+    public static String decodeUriQueryFrag(String string) {
+        // Space is special. Reverse order compared to encodeUriQueryFrag
+        String decStr0 = string.replace("+",  " ");
+        String decStr = StrUtils.decodeHex(decStr0,'%') ;
+        return decStr ;
     }
 
+
     /** Encode using the rules for a file: URL.
      *  Does not encode non-ASCII characters
      */
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java 
b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java
index dc260cd9c6..6cef24f4da 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/TestIRILib.java
@@ -41,10 +41,10 @@ public class TestIRILib {
         assertEquals(testString, decoded);
     }
 
-    private void encodeDecodeQueryFrag(String testString, String expected) {
+    private void encodeDecodeQueryFrag(String testString, String 
expectedEncoded) {
         String encoded = IRILib.encodeUriQueryFrag(testString);
-        assertEquals(expected, encoded);
-        String decoded = IRILib.decodeHex(encoded);
+        assertEquals(expectedEncoded, encoded);
+        String decoded = IRILib.decodeUriQueryFrag(encoded);
         assertEquals(testString, decoded);
     }
 
@@ -61,5 +61,10 @@ public class TestIRILib {
     public void codec_queryFrag_02() {
         encodeDecodeQueryFrag("http://example/graph?name=value#zzzz";, 
"http://example/graph?name%3Dvalue%23zzzz";);
     }
+
+    @Test
+    public void codec_queryFrag_03() {
+        encodeDecodeQueryFrag("ab cd", "ab+cd");
+    }
 }
 

Reply via email to