If you are creating or handling URL’s, there is a nice little package routine that assists with handling all those pesky special characters. I’ve added a little wrapper just to make the parameter handling easier
SQL> create or replace function utl_url_escape(x varchar2) return varchar2 is
2 begin
3 return utl_url.escape(x,true);
4 end;
5 /
Function created.
SQL> col escaped_char format a20
SQL> WITH special_chars
2 AS (SELECT '<' AS sp_char FROM dual UNION ALL
3 SELECT '>' AS sp_char FROM dual UNION ALL
4 SELECT '.' AS sp_char FROM dual UNION ALL
5 SELECT '#' AS sp_char FROM dual UNION ALL
6 SELECT '{' AS sp_char FROM dual UNION ALL
7 SELECT '}' AS sp_char FROM dual UNION ALL
8 SELECT '|' AS sp_char FROM dual UNION ALL
9 SELECT '\' AS sp_char FROM dual UNION ALL
10 SELECT '^' AS sp_char FROM dual UNION ALL
11 SELECT '~' AS sp_char FROM dual UNION ALL
12 SELECT '[' AS sp_char FROM dual UNION ALL
13 SELECT ']' AS sp_char FROM dual UNION ALL
14 SELECT '<' AS sp_char FROM dual UNION ALL
15 SELECT '`' AS sp_char FROM dual UNION ALL
16 SELECT '+' AS sp_char FROM dual UNION ALL
17 SELECT '/' AS sp_char FROM dual UNION ALL
18 SELECT '?' AS sp_char FROM dual UNION ALL
19 SELECT '&' AS sp_char FROM dual UNION ALL
20 SELECT '''' AS sp_char FROM dual)
21 SELECT sp_char
22 , utl_url.escape(sp_char) AS escaped_char
23 FROM special_chars;
S ESCAPED_CHAR
- --------------------
< %3C
> %3E
. .
# %23
{ %7B
} %7D
| %7C
\ %5C
^ %5E
~ ~
[ [
] ]
< %3C
` %60
+ +
/ /
? ?
& &
' '
19 rows selected.