我需要直接从oracle PL / SQL包发送HTML电子邮件。这几乎没问题。
我遇到的问题是,从表中提取的某些数据包含<S>
,<L>
和类似的片段,有时会被视为HTML标记,即使不是,它们总是被忽略而且从不显示。
因此,我需要在插入电子邮件正文之前转义此列。
是否有自动将html特殊字符转换为实体的功能?
或者我需要手动replace('<', '<', string)
所有特殊字符吗?
答案 0 :(得分:35)
您可以使用htf.escape_sc函数:
SQL> select htf.escape_sc('Please escape <this> tag') from dual;
HTF.ESCAPE_SC('PLEASEESCAPE<THIS>TAG')
------------------------------------------------------------------
Please escape <this> 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>')
--------------------------------------------------------------------------------
<test>&'"</test>