Nettoyer code HTML pour un select LENGTH(name) [Résolu]

Signaler
Messages postés
575
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
1 octobre 2020
-
Messages postés
575
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
1 octobre 2020
-
Bonjour,

Je dois compter le nombre de caractères de texte saisi dans un champ mais celui-ci contient des tags HTML et des \r donc il faudrait que je puisse exclure ces tags HTML et ces \r afin de pouvoir réellement compter le nombre de caractères réels de ce champ sans les tags <span>, <div> ou \r

Select LENTGH(name) from table;


Une idée?

Merci d'avance

3 réponses

Messages postés
454
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
23 octobre 2020
30
Messages postés
3644
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
971
Effectivement ça semble une bonne approche, je rajouterais juste sur le même modèle une regex qui remplace les caractères spéciaux de la forme
&...;
par un seul caractère (indifféremment, si le but n'est que de les compter)

Xavier
Messages postés
575
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
1 octobre 2020
16
Bonjour,

RV71
Merci effectivement cela est une bonne piste que je vais tester.

Reivax962
J'ai pas tout compris! Un exemple? Merci



Messages postés
3644
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
971
Ce que je veux dire, c'est qu'un code HTML risque aussi de contenir des codes du genre « & lt; », « & eacute; » ou autre, qu'il faut compter comme un seul caractère et non comme, respectivement, 4 et 8.
Ça peut se faire simplement en reprenant la fonction donnée par RV71, en y remplaçant < par & et > par ;
CREATE OR REPLACE FUNCTION strip_html_caracs(TEXT) RETURNS TEXT AS $$
    SELECT regexp_replace($1, '&[^;\s]*;', '_', 'g');
$$ LANGUAGE SQL;

Et tu peux créer une troisième fonction qui combine les deux premières :
CREATE OR REPLACE FUNCTION strip_html(TEXT) RETURNS TEXT AS $$
    SELECT strip_html_caracs(strip_tags($1));
$$ LANGUAGE SQL;

Un texte comme
<h1>L& apos;& eacute;valuation du nombre de caract& egrave;es</h1>
sera transformé en
L__valuation du nombre de caract_res
et tu pourras donc correctement y compter les caractères.

Xavier

PS : sur le forum, les caractères &...; sont reconnus et transcrits, je suis obligé de rajouter une espace après le & éviter ça, mais elle ne doit pas y être normalement.
Messages postés
3644
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020
971 >
Messages postés
3644
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 octobre 2020

J'ai pris le parti de remplacer les caractères spéciaux par _ car le but est simplement de les compter.
Si tu voulais qu'ils soient remplacés par leur vraie valeur, ça va être plus compliqué mais c'est possible : https://stackoverflow.com/questions/14961992/postgresql-replace-html-entities-function

Xavier
Messages postés
575
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
1 octobre 2020
16
Merci Xavier, très instructif. Je vais tester tout cela.