代码之家  ›  专栏  ›  技术社区  ›  SWilk

如何在Oracle PL/SQL中将<、>和字符转义为HTML实体

  •  17
  • SWilk  · 技术社区  · 14 年前

    我需要直接从Oracle PL/SQL包发送HTML电子邮件。这几乎没问题。

    我对从表中获取的某些数据包含如下内容有异议 <S> , <L> 和类似的片段,有时会被当作HTML标记处理,即使不是,它们也总是被忽略并且永远不会显示。

    所以,在插入到电子邮件正文之前,我需要先退出此列。

    是否有自动将HTML特殊字符转换为实体的函数? 或者我需要 replace('<', '&lt;', string) 手动所有特殊字符?

    3 回复  |  直到 6 年前
        1
  •  34
  •   Tony Andrews    14 年前

    您可以使用htf.escape_sc函数:

    SQL> select htf.escape_sc('Please escape <this> tag') from dual;
    
    HTF.ESCAPE_SC('PLEASEESCAPE<THIS>TAG')
    ------------------------------------------------------------------
    Please escape &lt;this&gt; tag
    
        2
  •  9
  •   Tim Funk    8 年前

    也可以使用DBMS_xmlgen.convert来处理CLOB。

    例子:

    select DBMS_XMLGEN.CONVERT('<foo>') from dual
    

    细节: https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_xmlgen.htm

        3
  •  0
  •   Pavel Safin    6 年前
    HTF.BDY :
    /* SPECIAL FUNCTIONS */
    function escape_sc(ctext in varchar2 character set any_cs)
             return varchar2 character set ctext%charset is
    begin return(replace(
                 replace(
                 replace(
                 replace(ctext, '&', '&' || 'amp;'),
                                '"', '&' || 'quot;'),
                                '<', '&' || 'lt;'),
                                '>', '&' || 'gt;'));
    end;
    

    您可以自己创建这个函数

    但最好使用dbms_xmlgen.convert函数的这个变体

    SQL> select dbms_xmlgen.convert('<test>&''"</test>') from dual
      2  /
    
    DBMS_XMLGEN.CONVERT('<TEST>&''"</TEST>')
    --------------------------------------------------------------------------------
    &lt;test&gt;&amp;&apos;&quot;&lt;/test&gt;