Valider 48e79e5b rédigé par Glop's avatar Glop Validation de cerdic
Parcourir les fichiers

fix: filtre `|couper`, toujours compter deux caractères pour les sauts de paragraphes

Pendant le calcul de la coupe du texte, les sauts de paragraphes
sont représentés par des `\r` (un caractère) mais, à l'issue du
filtre, ils sont remplacés par `\n\n` (deux caractères).

Par conséquent, cela fausse le calcul de la coupe et peut renvoyer
un texte plus long que demandé.

Ainsi, par exemple :
```
[(#VAL{<p>Un test du filtre |couper</p><p>avec deux paragraphes</p>}|couper{41})]
```
renvoie
* jusqu'à eebacfbe inclus :
  `Un test du filtre |couper\n\navec deux (...)`
  (42 caractères → KO) ;
* après ce correctif :
  `Un test du filtre |couper\n\navec (...)`
  (37 caractères → OK).

Il est important de compter les `\n` correctement, en particulier
pour les plugins qui fabriquent des messages de taille limitée
(comme des pouets ou des tweets).

Refs: #5422
parent c3e184df
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -408,11 +408,11 @@ function couper($texte, $taille = 50, $suite = null) {
	$texte = nettoyer_raccourcis_typo($texte);

	// balises de sauts de ligne et paragraphe
	$texte = preg_replace('/<p( [^>]*)?' . '>/', "\r", $texte);
	$texte = preg_replace('/<p( [^>]*)?' . '>/', "\r\r", $texte);
	$texte = preg_replace('/<br( [^>]*)?' . '>/', "\n", $texte);

	// on repasse les doubles \n en \r que nettoyer_raccourcis_typo() a pu modifier
	$texte = str_replace("\n\n", "\r", $texte);
	$texte = str_replace("\n\n", "\r\r", $texte);

	// supprimer les tags
	$texte = supprimer_tags($texte);
@@ -452,7 +452,7 @@ function couper($texte, $taille = 50, $suite = null) {
	}

	// remettre les paragraphes
	$texte = preg_replace("/\r+/", "\n\n", $texte);
	$texte = preg_replace("/\r\r+/", "\n\n", $texte);

	// supprimer l'eventuelle entite finale mal coupee
	$texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte);