#INTRODUCTION, fonction couper() et effactement de contenus "< suivi de >" #2774

Closed
opened 11 years ago by chankalan · 6 comments

suivant la rédaction des articles je trouve quelques bizarreries produites par la balise #INTRODUCTION et le raccourcis d'ancre nommée.
C'est un peu difficile à expliquer :
la rédaction suivante produit une introduction correcte, le lien vers l'ancre est hors introduction (mais même s'il l'était, il serait plus utilisable, c'est normal...) :
"
du texte

{{{des titres}}}

des paragraphes

des paragraphes

des liens [un lien->art81#ancrepage] vers des ancres ou non
"
alors que cette rédaction :
"
[ancre<-]
du texte

{{{des titres}}}

des paragraphes

des paragraphes

des liens [un lien->art81#ancrepage] vers des ancres ou non
"
produit cette introduction :
"
[ancreart81#ancrepage] vers des ancres
"
où tout le début de l'article est ignoré, l'ancre et le lien suivant sont rassemblés dans des crochets, donc interprétés bizarrement par le filtre de traitements typo, et le texte continu coupé au nombre de caractère correct.
Le truc que j'ai trouvé est d'utilisé la balise </ intro> pour exclure l'ancre de l'introduction.

Le phénomène se produit sur une version 3.0.2, je ne reproduit pas sur une version 2 où tout va bien...

suivant la rédaction des articles je trouve quelques bizarreries produites par la balise #INTRODUCTION et le raccourcis d'ancre nommée. C'est un peu difficile à expliquer : la rédaction suivante produit une introduction correcte, le lien vers l'ancre est hors introduction (mais même s'il l'était, il serait plus utilisable, c'est normal...) : " du texte {{{des titres}}} des paragraphes des paragraphes des liens [un lien->art81#ancrepage] vers des ancres ou non " alors que cette rédaction : " [ancre<-] du texte {{{des titres}}} des paragraphes des paragraphes des liens [un lien->art81#ancrepage] vers des ancres ou non " produit cette introduction : " [ancreart81#ancrepage] vers des ancres " où tout le début de l'article est ignoré, l'ancre et le lien suivant sont rassemblés dans des crochets, donc interprétés bizarrement par le filtre de traitements typo, et le texte continu coupé au nombre de caractère correct. Le truc que j'ai trouvé est d'utilisé la balise <intro > </ intro> pour exclure l'ancre de l'introduction. Le phénomène se produit sur une version 3.0.2, je ne reproduit pas sur une version 2 où tout va bien...
Poster

reproduit sur grml.eu (pour confirmer, même tardivement) et surtout sur un SPIP 2.1.15 également lorsque le texte est assez long, ça ne se reproduit pas si le texte est plus court, et il y a une différence de quelques caractères entre SPIP 3.0.2 et SPIP 2.1.15 : plutôt étrange... (même si c'est secondaire)

ci-joint le texte d'un article pour SPIP 3.0.2 qui reproduit le phénomène, il suffit de retirer une lettre et la balise INTRODUCTION fonctionne bien...

reproduit sur grml.eu (pour confirmer, même tardivement) et surtout sur un SPIP 2.1.15 également lorsque le texte est assez long, ça ne se reproduit pas si le texte est plus court, et il y a une différence de quelques caractères entre SPIP 3.0.2 et SPIP 2.1.15 : plutôt étrange... (même si c'est secondaire) ci-joint le texte d'un article pour SPIP 3.0.2 qui reproduit le phénomène, il suffit de retirer une lettre et la balise INTRODUCTION fonctionne bien...
Owner

J'ai reproduis aussi…

Ça vient du fait que le texte est coupé à 2 fois la longueur de l'introduction (2*500 pour les articles soit à 1000 caractères) par le filtre_introduction_dist(). Mais couper() se plante dans la coupe lamentablement.

On peut tester dans un squelette avec :

#ref]";
#$texte = "Un < suivi d'un > est mal vu !";
$texte = couper($texte, 100);
var_dump($texte);

?>
J'ai reproduis aussi… Ça vient du fait que le texte est coupé à 2 fois la longueur de l'introduction (2*500 pour les articles soit à 1000 caractères) par le filtre_introduction_dist(). Mais couper() se plante dans la coupe lamentablement. On peut tester dans un squelette avec : <pre> <?php $texte = "[ref<-]Ceci disparait. Comme pour un tag HTML[haut->#ref]"; #$texte = "Un < suivi d'un > est mal vu !"; $texte = couper($texte, 100); var_dump($texte); ?> </pre>
Owner
There is no content yet.
Owner

Un patch du style

Index: inc/texte_mini.php
===================================================================
--- inc/texte_mini.php  (revision 20478)
+++ inc/texte_mini.php  (working copy)
`` -253,7 +253,7 ``
        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){

devrait corriger, mais il faut rechecker tous les tests unitaires sur la fonction couper()

Un patch du style <pre> Index: inc/texte_mini.php =================================================================== --- inc/texte_mini.php (revision 20478) +++ inc/texte_mini.php (working copy) `` -253,7 +253,7 `` 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){ </pre> devrait corriger, mais il faut rechecker tous les tests unitaires sur la fonction couper()
Owner

C'est un peu plus compliqué.
Voir deja http://zone.spip.org/trac/spip-zone/changeset/72918

C'est un peu plus compliqué. Voir deja http://zone.spip.org/trac/spip-zone/changeset/72918
Owner

Résolu en 3.1, on ne reporte pas en 3.0 a priori car cela necessite d'etre suffisament testé
Version cible mise à 3.1
Statut changé à Fermé

Résolu en 3.1, on ne reporte pas en 3.0 a priori car cela necessite d'etre suffisament testé **Version cible mise à 3.1** **Statut changé à Fermé**
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.