UTL_URL包提供转换URL中的非法字符和保留字符的方法。

表 1. HTTP函数和存储过程

函数/存储过程

返回类型

说明

ESCAPE(url, escape reserved chars, url_charset)

VARCHAR2

使用ESCAPE函数转换URL中的非法字符和保留字符。

UNESCAPE(url, url charset)

VARCHAR2

UNESCAPE函数将URL转换为其原始形式。

说明

如果对一个函数的调用包含了格式不正确的URL,则UTL_URL包将返回异常BAD_URL。

ESCAPE

使用ESCAPE函数转换URL中的非法字符和保留字符:

ESCAPE(url VARCHAR2, escape_reserved_chars BOOLEAN, url_charset VARCHAR2)

保留字符将由一个百分号代替,且后面有两位为转换字符的ascii值提供的十六进制代码。

参数

参数名称

描述

url

url用于指定ESCAPE函数将要转换的URL。

escape reserved chars

escape_reserved_chars用于控制ESCAPE函数是否转换保留字符和非法字符,取值类型为BOOLEAN,默认值为FALSE。

  • 设置为FALSE时,ESCAPE函数将只转换指定URL中的非法字符。

  • 设置为TRUE时,ESCAPE函数将转换指定URL中的非法字符和保留字符。

在URL中可以使用的合法字符包括:大写字母A~Z、小写字母a~z、数字0~9、*!-(.)'~_

在URL的某些部分中,一些字符为合法字符,但在其它部分中却为非法字符,可参见RFC 2396关于非法字符的综合性条例。一些字符示例在URL的任何部分中都是非法字符,请参见非法字符

ESCAPE函数中可以使用的保留字符请参见保留字符,当escape_reserved_chars参数值设置为TRUE时,ESCAPE函数将对保留字符进行转换。

url_charset

url_charset用于在转换指定字符前,指定字符将要转换的目标字符集。url_charset的默认值为ISO-8859-1,当url_charset设置为NULL时 ,字符不会被转换。

表 2. 非法字符

非法字符

转换顺序

a blank space ( )

%20

curly braces ({ or })

%7b和%7d

hash mark (#)

%23

表 3. 保留字符

保留字符

转换顺序

ampersand (&)

%5C

at sign (@)

%25

colon (:)

%3a

comma (,)

%2c

dollar sign ($)

%24

equal sign (=)

%3d

plus sign (+)

%2b

question mark (?)

%3f

semi-colon (;)

%3b

slash (/)

%2f

示例

以下匿名代码块使用ESCAPE函数来转换URL中的空白处:

DECLARE
  result varchar2(400);
BEGIN
 result := UTL_URL.ESCAPE('http://www.example.com/Using the ESCAPE function.html');
  DBMS_OUTPUT.PUT_LINE(result);
END;

转换后的URL如下所示:

http://www.example.com/Using%20the%20ESCAPE%20function.html

调用ESCAPE函数时,如果将escape_reserved_chars参数值设置为TRUE,则ESCAPE函数将转换URL中的保留字符和非法字符:

DECLARE
  result varchar2(400);
BEGIN
 result := UTL_URL.ESCAPE('http://www.example.com/Using the ESCAPE function.html', TRUE);
  DBMS_OUTPUT.PUT_LINE(result);
END;

显示结果如下:

http%3A%2F%2Fwww.example.com%2FUsing%20the%20ESCAPE%20function.html

UNESCAPE

UNESCAPE函数用于删除由ESCAPE函数添加到URL中的转换字符,将URL转换为其初始格式,语法如下:

UNESCAPE(url VARCHAR2, url_charset VARCHAR2)

参数

参数名称

描述

url

url用于指定UNESCAPE函数将要转换的URL。

url_charset

在转换一个字符之后,此字符将假定为url_charset编码,且在返回之前,将从url_charset编码转换到数据库编码。url charset的默认值为ISO-8 85 9-1,当url_charset设置为NULL时,字符不会被转换。

示例

以下匿名代码块使用了UNESCAPE函数来转换URL中的空白处:

DECLARE
  result varchar2(400);
BEGIN
 result := UTL_URL.UNESCAPE('http://www.example.com/Using%20the%20UNESCAPE%20function.html');
  DBMS_OUTPUT.PUT_LINE(result);
END;

转换后的URL如下所示:

http://www.example.com/Using the UNESCAPE function.html