web-dev-qa-db-fra.com

Comment échapper les <,>, et & caractères aux entités HTML dans Oracle PL/SQL

J'ai besoin d'envoyer des courriels HTML directement à partir du package Oracle PL/SQL. Cela fonctionne presque bien.

Le fait que certaines des données extraites d'une table contiennent des éléments tels que <S>, <L> et des fragments similaires, parfois traités comme des balises HTML, me pose problème, même si ce n'est pas le cas, elles sont toujours ignorées et jamais affichées.

Je dois donc échapper à cette colonne avant de l'insérer dans le corps de l'e-mail.

Existe-t-il une fonction permettant d’échapper automatiquement des caractères spéciaux html dans des entités? Ou dois-je replace('<', '&lt;', string) manuellement tous les caractères spéciaux?

16
SWilk

Vous pouvez utiliser la fonction 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 est également disponible et peut gérer un clob.

Exemple:

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

Détails: 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;

Vous pouvez créer cette fonction vous-même

Mais il vaut mieux utiliser cette variante de la fonction 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