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。
在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