26.12 HTML_CLOBファンクション

このファンクションは、HTML環境でコンテキストが変更される可能性がある文字をエスケープします。これは、よく知られたSYS.HTF.ESCAPE_SCの拡張バージョンです。

このファンクションの結果は、SET_HTML_ESCAPING_MODEを使用して定義されているエスケープ・モードによって異なります。デフォルトのエスケープ・モードは「拡張」ですが、これは、手動でSET_HTML_ESCAPING_MODEをコールするか、アプリケーションのセキュリティ属性「HTMLエスケープ・モード」「基本」に設定することで上書きできます。モードが「基本」の場合、このファンクションの動作はSYS.HTF.ESCAPE_SCと同様です。そうでない場合は、次のルールが適用されます。

次の表に、このファンクションによって変換されるASCII文字と、それらの文字がエスケープされた値を示します。

表26-1 変換されるASCII文字がエスケープされた値

実際のASCII文字 戻されるエスケープされた文字
& &
" "
< &lt;
> &gt;
' &#x27;
/ &#x2F;

また、データベースのNLS文字セットがUTF-8以外の場合や、HTTPヘッダー変数REQUEST_IANA_CHARSETがUTF-8 (デフォルト)以外に設定されている場合は、このファンクションでUnicode文字をエスケープできます。Unicodeエスケープが適用される場合、これらの文字は、&#xHHHH;によってエスケープされます。ここで、HHHHはUnicodeの16進コードです。

構文

APEX_ESCAPE.HTML_CLOB (
    p_string    IN CLOB )
    RETURN CLOB deterministic;

パラメータ

パラメータ 説明
p_string エスケープされる文字列のテキスト

次の例では、基本(B)モードおよび拡張(E)モードでエスケープをテストします。

DECLARE
  procedure eq(p_str1 in clob,p_str2 in clob)
  is
  BEGIN
    IF dbms_lob.compare(p_str1||'.', p_str2||'.') <> 0 THEN
      raise_application_error(-20001,'p_str1 <> p_str2');
    END IF;
  END eq;
BEGIN
  apex_escape.set_html_escaping_mode('B');
  eq(apex_escape.html_clob('hello &"<>''/'), 'hello &amp;&quot;&lt;&gt;''/');
  apex_escape.set_html_escaping_mode('E');
  eq(apex_escape.html_clob('hello &"<>''/'), 'hello &amp;&quot;&lt;&gt;&#x27;&#x2F;');
END;