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的任何部分中都是非法字符,请参见表 2

ESCAPE函数中可以使用的保留字符请参见表 3,当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