Как экранировать символы <,> и & в html-объектах в Oracle PL / SQL - PullRequest
19 голосов
/ 16 июня 2010

Мне нужно отправлять электронные письма в формате HTML прямо из пакета Oracle / PL.Это работает почти нормально.

У меня проблема с тем, что некоторые данные, извлеченные из таблицы, содержат такие вещи, как <S>, <L> и подобные фрагменты, которые иногда рассматриваются как теги HTML, идаже если нет, они всегда игнорируются и никогда не отображаются.

Итак, мне нужно выйти из этого столбца, прежде чем вставлять его в тело письма.

Есть ли функция для автоматического вывода специальных символов html в сущности?Или мне нужно replace('<', '&lt;', string) вручную все специальные символы?

Ответы [ 3 ]

36 голосов
/ 16 июня 2010

Вы можете использовать функцию 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
9 голосов
/ 06 июня 2016

Также доступен DBMS_XMLGEN.CONVERT, который может обрабатывать сгусток.

Пример:

select DBMS_XMLGEN.CONVERT('<foo>') from dual

Детали: https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_xmlgen.htm

0 голосов
/ 18 апреля 2018
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;
...