8.1 utl_url.escape介绍

utl_url.escape可以对字符串进行URLEncode。该作用在开发“银企直连”的某些银行中会要求

签名之后返回的字符串需要进行URL编码,编码主要处理几个字符

%2B代替+

%2F代替/

%3D代替=

返回的字符串中的换行回车要去掉

utl_url.escape定义

 FUNCTION escape(url                   IN VARCHAR2 CHARACTER SET ANY_CS,

                 escape_reserved_chars IN BOOLEAN  DEFAULT FALSE,

                 url_charset           IN VARCHAR2 DEFAULT

                                                   utl_http.get_body_charset)

                 RETURN VARCHAR2 CHARACTER SET url%CHARSET;

程序实例一

begin

dbms_output.put_line( utl_url.escape('http://www.baidu.com/参数/=+/');

end;

运行结果

http://www.baidu.com/%BF%BF/=+/

可以发现utl_url.escape默认只对中文字符进行URLEncode对于/ + =等不进行编码这是我们在浏览器中常见的编码方式。

程序实例二

begin

dbms_output.put_line( utl_url.escape('http://www.baidu.com/参数/=+/',true));

end;

运行结果

http%3A%2F%2Fwww.baidu.com%2F%BF%BF%2F%3D%2B%2F

可以发现当加上一个True参数时utl_url.escape对字符串进行编码时对一些“关键字”也进行编码。该编码方式试用于POST方式提交报文时。

程序实例三

begin

dbms_output.put_line( utl_url.escape('http://www.baidu.com/参数/=+/',true,'UTF8'));

end;

运行结果

http%3A%2F%2Fwww.baidu.com%2F%E5%8F%82%E6%95%B0%2F%3D%2B%2F

第三个参数是对编码前指定编码格式,默认是按utl_http.get_body_charset 来编码的我们可以手动指定为UTF8等其他编码格式。

8.2 utl_url.unescape介绍

utl_url.unescape定义

 FUNCTION unescape(url         IN VARCHAR2 CHARACTER SET ANY_CS,

                   url_charset IN VARCHAR2 DEFAULT

                                           utl_http.get_body_charset)

                   RETURN VARCHAR2 CHARACTER SET url%CHARSET;

程序实例一

begin

dbms_output.put_line( utl_url.unescape('http%3A%2F%2Fwww.baidu.com%2F%E5%8F%82%E6%95%B0%2F%3D%2B%2F','UTF8'));

end;

运行结果

http://www.baidu.com/参数/=+/

如果没有指定以UTF8进行解密运行结果如下

http://www.baidu.com/°/=+/