无法阻止在 oracle apex 中替换 < >

unable to prevent replacement of < > in oracle apex

我知道这个问题肯定被问过无数次了,但我找不到有效的答案。

我在 oracle apex 交互式报表中使用解码语句。这个想法是,如果值为 null,则显示破折号,如果不是,则显示复选标记图像。

在我的 SQL 查询报告中,我有:

select "col1",
"col2",
decode (col3, NULL, '-', '<img src="#APP_IMAGES#check.png" alt="check mark" />') "col3"
from "#OWNER#"."table"

在报告中我看到了所有的列,在 col3 为空的地方我得到了一个破折号,但在不为空的地方,它打印了

<img src="path/to/check.png" alt="check mark" />

看着 html 它实际上正在打印出来 < > 而不是 <>。

转义这些字符应该很容易,但我不知道如何转义 < 和 > 字符。

有趣的是,我想到的网站对这些字符没有问题:http://www.ruleworks.co.uk/apex/howto-decode-doc.asp

找到 col3 属性。在 APEX 5 中,您会发现一个名为 "Escape special characters" 的选项。将其切换为 "no",您将看到 HTML.

但是,请谨慎使用此设置,因为您很容易引入 XSS(跨站点脚本)。在你的情况下,你不会因为你没有使用用户提供的数据作为 col3 的一部分,但很高兴知道。

更好的方法是尝试使用 "HTML Expression" 字段(也是列的一个属性)。然后 col3 可以 return 图像和 HTML 表达式将是:

select ...
     , decode (col3, NULL, 'blank.gif','check.png') col3_flag
       ...

HTML 表达式:

<img src="#APP_IMAGES##COL3_FLAG#"/>