如何逃避&lt ;,>和& Oracle PL / SQL中的html实体的字符

时间:2010-06-16 12:13:12

标签: html oracle plsql escaping html-escape-characters

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

我遇到的问题是,从表中提取的某些数据包含<S><L>和类似的片段,有时会被视为HTML标记,即使不是,它们总是被忽略而且从不显示。

因此,我需要在插入电子邮件正文之前转义此列。

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

3 个答案:

答案 0 :(得分:35)

您可以使用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

答案 1 :(得分:9)

还可以使用DBMS_XMLGEN.CONVERT来处理clob。

示例:

head

详细信息:https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_xmlgen.htm

答案 2 :(得分:0)

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;