From 2deb122b7ba16c7c94b7bd64492f6a55343dcb7d Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Tue, 21 May 2013 11:28:10 +0000 Subject: [PATCH] Ferme #2774 : supprimer_tags et couper avec un peu plus de precaution pour ne pas confondre la simple succession de < et > dans un texte avec un tag html a supprimer (ou comentaire html a supprimer) --- ecrire/inc/filtres.php | 7 ++++--- ecrire/inc/texte_mini.php | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php index 3e3a8582b5..168b3563dd 100644 --- a/ecrire/inc/filtres.php +++ b/ecrire/inc/filtres.php @@ -681,10 +681,11 @@ function recuperer_numero($texte) { * Texte converti **/ function supprimer_tags($texte, $rempl = "") { - $texte = preg_replace(",<[^>]*>,US", $rempl, $texte); - // ne pas oublier un < final non ferme + $texte = preg_replace(",<(!--|\w|/)[^>]*>,US", $rempl, $texte); + // ne pas oublier un < final non ferme car coupe + $texte = preg_replace(",<(!--|\w|/).*$,US", $rempl, $texte); // mais qui peut aussi etre un simple signe plus petit que - $texte = str_replace('<', ' ', $texte); + $texte = str_replace('<', '<', $texte); return $texte; } diff --git a/ecrire/inc/texte_mini.php b/ecrire/inc/texte_mini.php index bc2a90a141..a773767ded 100644 --- a/ecrire/inc/texte_mini.php +++ b/ecrire/inc/texte_mini.php @@ -292,7 +292,7 @@ function couper($texte, $taille=50, $suite = ' (...)') { if (!($length=strlen($texte)) OR $taille <= 0) return ''; $offset = 400 + 2*$taille; while ($offset<$length - AND strlen(preg_replace(",<[^>]+>,Uims","",substr($texte,0,$offset)))<$taille) + AND strlen(preg_replace(",<(!--|\w|/)[^>]+>,Uims","",substr($texte,0,$offset)))<$taille) $offset = 2*$offset; if ( $offset<$length && ($p_tag_ouvrant = strpos($texte,'<',$offset))!==NULL){ @@ -313,17 +313,17 @@ function couper($texte, $taille=50, $suite = ' (...)') { // supprimer les traits, lignes etc $texte = preg_replace("/(^|\r|\n)(-[-#\*]*|_ )/", "\r", $texte); - // supprimer les tags - $texte = supprimer_tags($texte); - $texte = trim(str_replace("\n"," ", $texte)); - $texte .= "\n"; // marquer la fin - // travailler en accents charset $texte = unicode2charset(html2unicode($texte, /* secure */ true)); if (!function_exists('nettoyer_raccourcis_typo')) include_spip('inc/lien'); $texte = nettoyer_raccourcis_typo($texte); + // supprimer les tags + $texte = supprimer_tags($texte); + $texte = trim(str_replace("\n"," ", $texte)); + $texte .= "\n"; // marquer la fin + // corriger la longueur de coupe // en fonction de la presence de caracteres utf if ($GLOBALS['meta']['charset']=='utf-8'){ -- GitLab