MariaDB/MySQL "htmltotext" récupérer le texte brut d'un champ Html

Fonction htmltotext pour extraire le texte brut d'un contenu Html
 

J'ai besoin de récupérer le texte d'un contenu Html stocké dans une base de données MariaDB.
Après recherche je n'ai rien trouvé de satisfaisant, cela doit être simple, portable et éviter l'installation d'application tierce.
La fonction MySQL suivante convient à mon besoin :

 

DROP FUNCTION IF EXISTS htmltotext;
DELIMITER |
CREATE FUNCTION `htmltotext`($str text) RETURNS text CHARSET latin1 DETERMINISTIC NO SQL 
BEGIN
    DECLARE $start, $end INT DEFAULT 1;
    IF($str IS NULL) THEN RETURN ""; END IF;

    SET $str = REPLACE($str, "\\r\\n", "");	
    SET $str = REPLACE($str, "<br>", "\\r\\n");
    SET $str = REPLACE($str, "<br/>", "\\r\\n");
    SET $str = REPLACE($str, "<br />", "\\r\\n");
    SET $str = REPLACE($str, "</p>", "</p>\\r\\n");

    SET $str = REPLACE($str, "&nbsp;", " ");
    SET $str = REPLACE($str, "&euro;", "€");
    SET $str = REPLACE($str, "&aacute;", "á");
    SET $str = REPLACE($str, "&agrave;", "à");
    SET $str = REPLACE($str, "&eacute;", "é");
    SET $str = REPLACE($str, "&egrave;", "è");
    SET $str = REPLACE($str, "&iacute;", "í");
    SET $str = REPLACE($str, "&oacute;", "ó");
    SET $str = REPLACE($str, "&uacute;", "ú");
    SET $str = REPLACE($str, "&lt;", "<");
    SET $str = REPLACE($str, "&gt;", ">");
    SET $str = REPLACE($str, "&trade;", "™");

    LOOP
        SET $start = LOCATE("<", $str, $start);
        IF (!$start) THEN RETURN $str; END IF;
        SET $end = LOCATE(">", $str, $start);
        IF (!$end) THEN SET $end = $start; END IF;
        SET $str = INSERT($str, $start, $end - $start + 1, "");
    END LOOP;
END
|
DELIMITER ;

Mon choix est de renvoyer une chaîne vide pour un appel avec NULL, vous pouvez remplacer la ligne suivante

IF($str IS NULL) THEN RETURN ""; END IF;

par

IF($str IS NULL) THEN RETURN NULL; END IF;

Pour retourner NULL avec un appel avec NULL en paramètre, c'est le comportement de la plus part des fonctions MySQL.

La première partie du code est là pour avoir des sauts de lignes, on remplace les <br> est </p> par un saut. Peut etre à compléter avec des remplacement de </h1> </h2> ... par un saut de ligne, dans mon cas je n'en ai pas besoin.

La seconde partie remplace les caractère spéciaux, la aussi à compléter suivant les besoins.

Enfin la dernière partie supprime les tags html, on enlève tout ce qui se trouve entre < et >

Vus : 1341
Publié par Zeph : 15