Oracle Apex如何防止邮件模板中的HTML转义?
Oracle APEX邮件模板!RAW标记失效,如何阻止HTML转义?
问题场景
- 邮件模板代码:
<br>#DATA!RAW#<br> - 传递的DATA变量值:
{"DATA":"<table><tr><th>...."} - 问题:!RAW标记未生效,最终邮件里的DATA变量仍被双引号包裹,HTML内容被转义
解决方案
1. 直接传递原始HTML内容(推荐)
问题根源是你传递的DATA值本身是带双引号的JSON字符串,!RAW标记只会处理变量值内部的HTML转义,不会去除外层的双引号。正确做法是直接把HTML内容作为DATA的变量值,而非包裹在JSON结构里。
示例Apex代码:
DECLARE l_data VARCHAR2(32767); BEGIN l_data := '<table><tr><th>列1</th><th>列2</th></tr><tr><td>值1</td><td>值2</td></tr></table>'; apex_mail.send( p_to => 'recipient@example.com', p_from => 'sender@example.com', p_subject => '测试邮件', p_html_body => apex_mail.parse_template( p_template => '<br>#DATA!RAW#<br>', p_placeholders => apex_util.string_to_table('DATA:'||l_data) ) ); END; /
2. 若必须传递JSON格式数据
先解析JSON提取HTML内容,必要时反转义后再赋值给DATA变量:
示例Apex代码:
DECLARE l_json VARCHAR2(32767); l_html VARCHAR2(32767); BEGIN l_json := '{"DATA":"<table><tr><th>...."}'; -- 提取JSON中的HTML内容 l_html := apex_json.get_varchar2(p_path => 'DATA', p_source => l_json); -- 若JSON中的HTML已转义(如<),执行反转义 l_html := apex_string.unescape(l_html); apex_mail.send( p_to => 'recipient@example.com', p_from => 'sender@example.com', p_subject => '测试邮件', p_html_body => apex_mail.parse_template( p_template => '<br>#DATA!RAW#<br>', p_placeholders => apex_util.string_to_table('DATA:'||l_html) ) ); END; /
3. 确保模板解析的正确姿势
必须通过apex_mail.parse_template函数处理模板和占位符,!RAW是该解析器的专属语法,如果自己手动拼接字符串,标记不会生效。
内容的提问来源于stack exchange,提问作者Vitaly
相关产品推荐
相关产品推荐

