+13
−7
Chargement en cours
Jusqu'à présent, le filtre supposait que le texte de suite faisait
exactement 5 caractères, indépendamment de sa véritable taille.
Qui plus est, le texte de suite par défaut ` (...)` fait 6 caractères
et non pas 5 (car il faut aussi compter l'espace insécable), ce qui
fait que la longueur de la chaîne retournée était parfois incorrecte.
Ainsi, par exemple :
```
[(#VAL{Un nouveau test du filtre |couper bla bli blu}|couper{42})]
```
renvoie
* jusqu'à eebacfbe inclus :
`Un nouveau test du filtre |couper bla (...)` (43 caractères → KO) ;
* après ce correctif :
`Un nouveau test du filtre |couper (...)` (39 caractères → OK).
De même, en spécifiant un autre texte de coupe :
```
[(#VAL{Un nouveau test du filtre |couper bla bli blu}|couper{42, (etc.)})]
```
renvoie
* jusqu'à eebacfbe inclus :
`Un nouveau test du filtre |couper bla (etc.)` (44 caractères → KO) ;
* après ce correctif :
`Un nouveau test du filtre |couper (etc.)` (40 caractères → OK).
Aussi, lorsque la coupe tombait juste après un mot, l'expression
régulière employée dans le `preg_replace()` suivant considérait ce mot
comme tronqué car non suivi d'une espace. Afin de pouvoir détecter les
coupes en fin de mot, il faut en fait couper avec un caractère de plus
et modifier l'expression régulière en conséquence :
* soit ce dernier caractère est une espace, auquel cas on n'a pas coupé
au milieu d'un mot, et il faut supprimer uniquement cette espace
(c'est le `[\s]` dans la seconde alternative de l'expression
régulière) ;
* soit ce dernier caractère n'est pas une espace, auquel cas on a coupé
au milieu de (ou juste avant) un mot, et il faut supprimer ce mot
(c'est le `[^\s]+` dans la seconde alternative de l'expression
régulière).
Enfin, il faut aussi ajouter le modifieur `D` (`PCRE_DOLLAR_ENDONLY`)
à l'expression régulière pour qu'elle ne traite pas différemment le `\n`
ajouté comme marqueur de fin de texte :
https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
Refs: #5422
Forge communautaire SPIP | Charte d'utilisation | Signaler un problème sur ce site