UTL_URL パッケージは、URL 内の無効な文字および予約文字をエスケープするメソッドを提供します。

表 1. UTL_URL 関数とプロシージャ
関数/ストアドプロシージャ 戻り値の型 説明
ESCAPE(url, escape_reserved_chars, url_charset) VARCHAR2 URL 内の無効な文字および予約文字をエスケープします。
UNESCAPE(url, url_charset) VARCHAR2 URL を元の形式に変換します。

関数の呼び出しに無効な URL が含まれている場合、UTL_URL パッケージは BAD_URL 例外を返します。

ESCAPE

ESCAPE 関数は、URL 内の無効な文字および予約文字をエスケープします。 構文は次のとおりです。

ESCAPE(url VARCHAR2, escape_reserved_chars BOOLEAN, url_charset VARCHAR2)

予約文字は、パーセント記号 (%) で始まる 2 桁の 16 進コード (16 進数の値はエスケープ対象文字の ASCII 値) に置き換えられます。

パラメーター

パラメーター 説明 
url url は、UTL_URL がエスケープする URL (Uniform Resource Locator) を指定します。
escape_reserved_chars escape_reserved_chars は、ESCAPE 関数に予約文字と無効な文字をエスケープするように指示するブール値です。
  • escaped_reserved_charsFALSE に設定されている場合、ESCAPE 関数は指定された URL の無効な文字のみをエスケープします。
  • escape_reserved_charsTRUE に設定されている場合、ESCAPE 関数は、指定された URL の無効な文字と予約文字を両方ともエスケープします。 デフォルトでは、escape_reserved_chars は、FALSE に設定されています。

URL 内の有効な文字の詳細については、「表 2」をご参照ください。

一部の文字は URL のある部分で有効ですが、別の部分では無効です。 無効な文字に関連するルールの詳細については、RFC 2396 をご参照ください。 URL のどの部分でも無効と見なされる文字の例については、「表 3」をご参照ください。

ESCAPE 関数によって予約されていると見なされる文字の詳細については、「表 4」をご参照ください。 escape_reserved_charsTRUE に設定されている場合、ESCAPE 関数は予約文字をエスケープします。

url_charset url_charset は、エスケープする前に、与えられた文字をどの文字セットに変換すべきかを指定します。 url_charsetNULL の場合、文字は変換されません。 url_charset のデフォルト値は、ISO-8859-1 です。
表 2. 有効な文字
英大文字 (A〜Z) 英小文字 (a〜z) 数字 (0〜9)
アスタリスク (*) 感嘆符 (!) ハイフン (-)
開括弧 (() ピリオド (.) 閉括弧 ())
一重引用符 (') チルダ (~) アンダースコア (_)
表 3. 無効な文字
無効な文字 エスケープシーケンス
空白 ( ) %20
中括弧 ({ または }) %7B および %7D
ハッシュマーク (#) %23
表 4. 予約文字
予約文字 エスケープシーケンス
アンパサンド (&) %26
アットマーク (@) %40
コロン (:) %3A
コンマ (,) %2C
ドル記号 ($) %24
等号 (=) %3D
正符号 (+) %2B
疑問符 (?) %3F
セミコロン (;) %3B
スラッシュ (/) %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_reserved_chars パラメーターに TRUE の値が含まれる場合は、次のとおりです。

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;

ESCAPE 関数は、URL の予約文字と無効な文字をエスケープします。

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

UNESCAPE

UNESCAPE 関数は、ESCAPE 関数によって URL に追加されたエスケープを解除し、URL を元の形式に変換します。 構文は次のとおりです。

UNESCAPE(url VARCHAR2, url_charset VARCHAR2)

パラメーター

パラメーター 説明 
url url は、UTL_URL でエスケープが解除される URL (Uniform Resource Locator) を指定します。
url_charset 文字のエスケープが解除されると、その文字は url_charset でエンコードされていると見なされます。 文字が返される前に、文字は url_charset エンコードからデータベースエンコードに変換されます。 url_charset が NULL の場合、文字は変換されません。 url_charset のデフォルト値は ISO-8859-1 です。

次の匿名ブロックでは、ESCAPE 関数を使用して空白がエスケープされた 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