diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap
index 6b29c2f35..bf81621fc 100644
--- a/src/zabapgit_html_action_utils.prog.abap
+++ b/src/zabapgit_html_action_utils.prog.abap
@@ -92,6 +92,11 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
ev_seed TYPE string
RAISING lcx_exception.
+ PRIVATE SECTION.
+ CLASS-METHODS unescape
+ IMPORTING iv_string TYPE string
+ RETURNING VALUE(rv_string) TYPE string.
+
ENDCLASS. "lcl_html_action_utils DEFINITION
*----------------------------------------------------------------------*
@@ -124,11 +129,11 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
field-name = substring_before( val =
sub = '=' ).
- field-name = cl_http_utility=>unescape_url( field-name ).
+ field-name = unescape( field-name ).
field-value = substring_after( val =
sub = '=' ).
- field-value = cl_http_utility=>unescape_url( field-value ).
+ field-value = unescape( field-value ).
INSERT field INTO TABLE rt_fields.
@@ -136,6 +141,15 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
ENDMETHOD.
+ METHOD unescape.
+* do not use cl_http_utility as it does strange things with the encoding
+ rv_string = iv_string.
+
+* todo, more to be added here
+ REPLACE ALL OCCURRENCES OF '%3F' IN rv_string WITH '?'.
+
+ ENDMETHOD.
+
METHOD parse_fields_upper_case_name.
rt_fields = parse_fields( iv_string ).
diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap
index 37b38afe9..d187f05b5 100644
--- a/src/zabapgit_unit_test.prog.abap
+++ b/src/zabapgit_unit_test.prog.abap
@@ -1779,6 +1779,7 @@ CLASS ltcl_html_action_utils DEFINITION FOR TESTING RISK LEVEL HARMLESS
METHODS get_field FOR TESTING.
METHODS parse_fields_simple_case FOR TESTING.
METHODS parse_fields_advanced_case FOR TESTING.
+ METHODS parse_fields_unescape FOR TESTING.
METHODS parse_fields_german_umlauts FOR TESTING.
PRIVATE SECTION.
@@ -1917,6 +1918,19 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
ENDMETHOD.
+ METHOD parse_fields_unescape.
+* file status = '?', used in staging page
+
+ _given_string_is( '/SRC/ZFOOBAR.PROG.ABAP=%3F' ).
+
+ _when_fields_are_parsed( ).
+
+ _then_fields_should_be( index = 1
+ name = '/SRC/ZFOOBAR.PROG.ABAP'
+ value = '?' ).
+
+ ENDMETHOD.
+
METHOD parse_fields_german_umlauts.
DATA: ae TYPE string,