Zeph : MariaDB/MySQL "htmltotext" récupérer le texte brut d'un champ Html
mercredi 26 novembre 2014 à 09:18
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, "
", "\\r\\n"); SET $str = REPLACE($str, "
", "\\r\\n"); SET $str = REPLACE($str, "
", "\\r\\n"); SET $str = REPLACE($str, "", "\\r\\n"); SET $str = REPLACE($str, " ", " "); SET $str = REPLACE($str, "€", "€"); SET $str = REPLACE($str, "á", "á"); SET $str = REPLACE($str, "à", "à"); SET $str = REPLACE($str, "é", "é"); SET $str = REPLACE($str, "è", "è"); SET $str = REPLACE($str, "í", "í"); SET $str = REPLACE($str, "ó", "ó"); SET $str = REPLACE($str, "ú", "ú"); SET $str = REPLACE($str, "<", "<"); SET $str = REPLACE($str, ">", ">"); SET $str = REPLACE($str, "™", "™"); 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
est
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 >
Original post of Zeph.Votez pour ce billet sur Planet Libre.
Articles similaires
- alienus : HTMLiser un répertoire internet (07/11/2010)
- Philippe Scoffoni : Edito vidéo – PostgreSQL 9.2 progresse, faut-il abandonner MySQL et passer à MariaDB ? (17/09/2012)
- Planet Libre : Brèves du Planet Libre - Monday 10, December 2012 (10/12/2012)
- Planet Libre : Brèves du Planet Libre - Monday 01, April 2013 (01/04/2013)
- Carl Chenet : Vrac de mini-messages n°5 : rhel7, PyPy, Prism, Debian Wheezy 7.1, docker, SSH, chromium (18/06/2013)