[spip-dev] tri alpha et multi

bonjour,

Un site avec spip 192 bilingue fr/en. Le titre des mots-clés sont
rédigés avec <multi> et je constate que le tri alphabétique sur le
titre avec {par multi titre} dans la boucle marche étrangement avec
les caractères accentués.

Sur un site en local j'ai par exemple :
Épidémie,
Avis,
Discrimination,
Dépistage,
VIH.

Sur un site sur un serveur en ligne (même configuration spip et mysql
également en utf8), j'ai
Avis,
Discrimination,
Épidémie,
VIH,
Dépistage

Espace privé ou publique, dans un cas comme dans l'autre, l'ordre (le
désordre plutôt) est le même. Et il ne se pose bien entendu qu'avec
<multi>.

Pour Spip 2, les problèmes sont les mêmes, mais le tri ne se fait pas
là non plus de la même manière. Essai en local uniquement, sur la
partie privée : j'obtiens le même résultat qu'avec spip 1.9.2 sur ce
compte en ligne (c'est-à-dire : les mots qui commencent par un
caractère accentués ne sont pas au bon endroit ; les mots qui
contiennent un caractère accentués sauf la première lettre sont placés
à la fin).

Au départ, je pensais à un problème d'encodage des caractères côté
mysql, mais je ne vois pas où pourrait être le problème. Vous avez
déjà constaté une situation identique ?

merci
christophe

bonjour,

je me permets d'insister... :wink:

après des essais supplémentaires (ici encore en 1.9.2 -- oui, je sais,
c'est pas la plus récente, mais je dois travailler sur cette version
pour le moment), je me suis aperçu que le critère {par titre multi} ne
nettoie pas complètement le titre. En recopiant la requête dans
var_mode=debug et en vérifiant dans phpmyadmin, j'obtiens ceci :

INSERT INTO `spip_mots` (`titre`, `<multi>`) VALUES
(']About</multi>', '<multi>[fr]À propos [en]About</multi>'),
(']Ed</multi>', '<multi>[fr]Édouard [en]Ed</multi>'),
(']News</multi>', '<multi>[fr]Actualités [en]News</multi>'),
(']Screening</multi>', '<multi>[fr]Dépistage[en]Screening</multi>'),
('Current</multi>', '<multi>[fr]En cours [en]Current</multi>'),
('Hand</multi>', '<multi>[fr]Main[en]Hand</multi>'),
('HIV</multi>', '<multi>[fr]VIH[en]HIV</multi>'),
('Members</multi>', '<multi>[fr]Membres[en]Members</multi>'),
('titre', 'titre');

En somme, dans la page en anglais, il reste un crochet fermant dans le
titre lorsque le titre français contient un ou plusieurs caractères
accentués.Du coup, ces mots passent en premier.

Est-ce que le problème peut se situer au niveau de la base ? de la
requête ? de spip ? de moi ?...

merci
christophe

Le 9 novembre 2008 19:14, christophe le drean <christopheld@gmail.com> a écrit :

en modifiant la requête (CHAR_LENGTH au lieu de LENGTH) :

SELECT (TRIM(IF(INSTR(mots.titre, '<multi>') = 0 , TRIM(mots.titre),
CONCAT( LEFT(mots.titre,
INSTR(mots.titre, '<multi>')-1), IF( INSTR(TRIM(RIGHT(mots.titre,
LENGTH(mots.titre)
-(6+INSTR(mots.titre, '<multi>')))),'[fr]') = 0, IF(
TRIM(RIGHT(mots.titre, CHAR_LENGTH(mots.titre)
-(6+INSTR(mots.titre, '<multi>')))) REGEXP '^\[[a-z\_]{2,}\]', INSERT(
TRIM(RIGHT(mots.titre,
CHAR_LENGTH(mots.titre) -(6+INSTR(mots.titre, '<multi>')))), 1,
INSTR(TRIM(RIGHT(mots.titre,
CHAR_LENGTH(mots.titre) -(6+INSTR(mots.titre, '<multi>')))), ']'), ''
), TRIM(RIGHT(mots.titre,
CHAR_LENGTH(mots.titre) -(6+INSTR(mots.titre, '<multi>')))) ),
TRIM(RIGHT(mots.titre, (
CHAR_LENGTH(mots.titre) - (INSTR(mots.titre, '[fr]')+
CHAR_LENGTH('[fr]')-1) ) )) ) ) ))) AS multi ,
mots.titre FROM `rougerose_rouge_rose_spip192`.spip_mots AS `mots`
ORDER BY multi

ça marche nickel...

Quoi vous en pensez ?

c.

Le 10 novembre 2008 19:17, christophe le drean
<christopheld@gmail.com> a écrit :