it-swarm.com.ru

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

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

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

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

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

16
SWilk

Вы можете использовать функцию 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
33
Tony Andrews

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

Пример:

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

Подробности: https://docs.Oracle.com/cd/B19306_01/appdev.102/b14258/d_xmlgen.htm

9
Tim Funk
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;
0
Pavel Safin