You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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已转义(如&lt;),执行反转义
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:27:09