Valider 9980f342 rédigé par Glop's avatar Glop Validation de cerdic
Parcourir les fichiers

fix: Filtre `|couper`, ne pas décompter les caractères UTF-8

Les fonctions `spip_substr()` et `spip_strlen()` gèrent déjà
correctement les chaînes UTF-8. Il n'y a donc pas besoin de
corriger la longueur de coupe en lui rajoutant des caractères
supplémentaires pour les caractères UTF-8.

Ainsi, par exemple :
```
[(#VAL{Tést àvéc plêïn d’àççènts bla bli blu}|couper{31})]
```
renvoie
* jusqu'à eebacfbe inclus :
  `Tést àvéc plêïn d’àççènts bla (...)` (35 caractères → KO) ;
* après ce correctif :
  `Tést àvéc plêïn d’àççènts (...)` (31 caractères → OK).

Cela rejoint le bug rapporté par @Fil dans les commentaires de #255 :
spip/spip#255

Refs: #5422
parent a536f889
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+0 −10
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -419,16 +419,6 @@ function couper($texte, $taille = 50, $suite = null) {
	$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') {
		$long = charset2unicode($texte);
		$long = spip_substr($long, 0, max($taille, 1));
		$nbcharutf = preg_match_all('/(&#[0-9]{3,6};)/S', $long, $matches);
		$taille += $nbcharutf;
	}


	// couper au mot precedent
	$long = spip_substr($texte, 0, max($taille - 4, 1));
	$u = $GLOBALS['meta']['pcre_u'];