Le 29/1/2010, 17:18 [Résolu] Problème de recherche avec accents dans Spip !
Depuis maintenant quelques temps, nous avions remarqué que certains sites sous spip avaient la recherche qui ne marchait pas bien. Ils ne trouvaient pas les mots avec accents.
Après un peu de recherche et grâce à notre expertise Linux Mysql & co, nous avons trouvé la solution, que nous vous confions ici, exemples et explications à l’appui !
Êtes-vous concernés par ce bug ?
Tout d’abord, il faut que vous testiez que ce bug vous concerne bien.
Pour cela, rendez-vous dans l’interface d’administration de votre spip, et tapez une recherche sur un mot avec accent, tel qu’il est entré dans un de vos articles.
Si spip ne vous retourne aucun résultat, c’est probablement que ce bug vous concerne !
Attention : il se peut que spip vous sorte quand même un résultat, par exemple si votre article contient à la fois le mot avec et sans accent. Par exemple, si un article contient "médecin" et "medecin", spip va bien le trouver si vous cherchez "médecin".
Ensuite, nous avons corrigé ce bug dans le contexte d’un site sous Spip avec une base de données en UTF-8. Pour vérifier que votre base est en UTF-8, rendez-vous dans l’espace privé de votre spip, et cliquez sur "Configuration" > "Gestion des langues" et regardez le bloc "Jeu de caractères du site". Il doit être en utf-8
Si ces 2 facteurs sont les mêmes chez vous, il y a de grandes chance que vous puissiez corriger ce bug en quelques minutes !
Enfin, pour en être sur, si vous avez accès à votre base de données via PHPMyAdmin, rendez-vous sur la table spip_articles et regardez le contenu de votre articles. si les mots avec accents apparaissent "encodés" un peu comme ça : "Réunion de travail du réseau" c’est très bon signe : on va pouvoir vous aider.
Je propose 2 modes de résolutions différents :
Le premier requiert de pouvoir accéder en console SSH à la machine qui héberge votre base de données, ou à une machine qui vous permet d’accéder en direct à la base de votre site. C’est le mode console
Le second mode de résolution nécessite de pouvoir accéder à votre base de données Spip via l’outil de gestion de bases de données nommé PHPMyAdmin. C’est le mode phpmyadmin.
Suivez donc l’un des paragraphes correspondant pour résoudre votre problème.
ATTENTION : Faites une sauvegarde complète de votre base de données avant de procéder à ces modifications. Je ne saurais être responsable de toute perte de données sur votre site, comme il se doit !
Résoudre le problème de recherche avec les accents dans Spip : Mode Console
Tout d’abord, munissez-vous des nom d’utilisateurs, mot de passe, et nom de la base de données de votre site spip. Ces informations seront utilisées dans les commandes ci-dessous.
Ensuite, tapez les commandes suivantes : (note : si vous ne les comprenez pas du tout, demandez à un ami qui s’y connait hein, je ne veux pas que vous perdiez vos données ;) )
$ mysqldump -unom_utilisateur -pmot_de_passe --quote-names --set-charset --default-character-set=latin1 nom_de_base_spip > dump.sql
$ cat dump.sql |sed -e 's/latin1/utf8/g' >dump2.sql
$ mysql -unom_utilisateur -pmot_de_passe nom_de_base_spip < dump2.sqlEnsuite, modifiez le fichier config/connect.php pour y ajouter, juste après le spip_connect_db, la ligne suivante :
mysql_query("SET NAMES 'utf8'");Résoudre le problème de recherche avec les accents dans Spip : Mode phpmyadmin
Si vous avez uniquement accès à votre base de données via PHPMyAdmin, connectez-vous à votre interface phpmyadmin et procédez ainsi :
cliquez sur "Exporter", puis cochez "SQL" "Structure" "Ajouter DROP TABLE..." "Données" "Transmettre"
cliquez sur "Exécuter", phpmyadmin vous fait télécharger un fichier dump sql au nom de votre base de données.
ouvrez le fichier dump obtenu à l’aide d’un éditeur de document. Pour notre exemple, je montrerais comment faire avec emacs sous Linux ou Notepad++ sous Windows. Sous Mac, bein débrouillez-vous ;) (ou essayez d’utiliser un editeur de texte et la ligne de commande iconv, surement disponible sur mac)
vérifiez que dans les première lignes, vous avez quelque chose du genre :
/*!40101 SET NAMES utf8 */;Si vous ne l’avez pas, je ne garantis pas le résultat ...
cherchez "=latin1" et remplacez-le partout par "=utf8" (théoriquement c’est en fin de chaque définition de table que l’on retrouve cette chaine.)
si vous utilisez notepad++, allez dans "Encodage" > "Convertir en Ansi" puis "Encodage" > "Encoder en UTF-8 (sans BOM)". Une fois cela fait, vous avez normalement de jolis accents de visible dans votre dump des articles !
sauvez le dump ainsi obtenu
retournez dans phpmyadmin
cliquez sur "Importer"
cliquez sur "Parcourir" et allez chercher le fichier dump modifié dans votre disque dur
choisissez "utf8" dans "jeu de caractères du fichier"
cliquez sur "Exécuter"
(Cela peut prendre un peu de temps le temps de tout uploader)
Si vous utilisez Linux et Emacs pour éditer votre fichier, une fois ce dernier modifié (latin1>utf8), utilisez la ligne de commande suivante :
$ iconv -f UTF-8 -t ISO8859-1//IGNORE <dump.sql >dump2.sqlCela pourrait marcher (mais j’avoue ne pas avoir vraiment essayé ...)
Enfin, et dans tous les cas, dans les fichiers de votre site spip, modifiez le fichier config/connect.php pour y ajouter, juste après le spip_connect_db, la ligne suivante :
mysql_query("SET NAMES 'utf8'");Qu’est-ce que j’ai fait à ma base ?
La question que l’on nous a posé souvent avant (ou après) avoir fait cette manipulation : Mais j’ai fait quoi à ma base avec ces commandes ?
Et bien pour faire court : vous avez rendu cohérent la structure de données et les jeux de caractères et interclassements de MySQL et ceux utilisés par Spip.
Pour l’explication longue, comme cela nécessite de faire un gros chapitre sur les interclassements, les clés de tris, les jeux de caractères et tout et tout, et bien cela sera dans un prochain billet :) (très prochain je vous le promet...)
(une petite intro à ce billet pour la route ...
En fait, MySQL, le serveur de base de données, sert à stocker des données. À priori, si on ne lui demande que de stocker ou rapatrier des données, MySQL se moque du jeu de caractères de vos données. Par contre, si vous effectuez une recherche, mysql va effectuer une comparaison. Si on lui demande de trier des données selon un champ texte, il va devoir trier des données texte pour vous les retourner.
Et c’est là que les jeux de caractères entrent en scène : En effet, en Français, si l’on trie, les caractères éèê et ë doivent être considérés comme s’ils étaient un e, et de même pour les autres accents. Lorsque l’on recherche, dans certaines langues, on peut aussi ignorer les accents.
)
Thèmes
[Geekland] - [Logiciels Libres] - [Corporate] - [www] -
Who's there?
Bienvenue sur le blog de Benjamin Sonntag, entrepreneur web, expert Linux et semi-geek amateur de logiciels libres.
Vous trouverez ici des geekeries, des trucs astuces et copinages, des histoires persos et un peu de politique ...
Sur le même sujet ...
- le 4 mai 2010Joli style pour formulaire forcé
- le 25 juin 2010Apple : service push notification HS
- le 20 juillet 2010Arduino, pilote pour panneau de led Sure0832
- le 29 juillet 2010SPIP : mon CMS est compatible IPv6
- le 20 janvierDNS & AlternC - Comment ça marche ?
- le 5 novembre 2010Minitel 2.0 ou hallucination commerciale en 2010...
- le 24 juillet 2010Scrapbooking - Aline & Animfolie’s
- le 27 septembre 2010Trident Media Guard ne déclare pas ses comptes...
- le 8 novembre 2010Hadopi : au suivant !
Chez Aline et ses Animfolies'
- 4 février – Encore 2 pages…
- 29 janvier – Ma page préférée
- 28 janvier – Encore 2 nouvelles pages …
- 26 janvier – 2 nouvelles pages
- 22 janvier – ABCdaire
Sur le navire Octopuce ...
- 17 novembre 2011 – Octopuce SARL recherche un développeur PHP/MySQL
- 23 octobre 2011 – Octopuce à Metz (Libre et Entreprises)
- 23 octobre 2011 – Octopuce à Metz (Libre et Entreprises)
- 19 janvier 2011 – Comment utiliser les hooks de GIT pour mettre à jour automatiquement un site de développement
- 18 janvier 2011 – Hébergement de dépôts GIT sur un serveur via Gitosis
La Quadrature du Net
- 2 février – ACTA : Le Commissaire De Gucht ment au Parlement européen
- 30 janvier – Démontage des mensonges de la Commission européenne sur ACTA
- 26 janvier – ACTA signé par l'UE. Ensemble, nous devons le vaincre !
- 23 janvier – Après SOPA et PIPA aux États-Unis, ACTA arrive au Parlement européen
- 20 janvier – MegaUpload : l'industrie du copyright en guerre contre les créatures qu'elle a enfantées
Des vieux trucs ...
- 11 novembre 2010 – Se débarasser de la neufbox/sfrbox fibre, mode d’emploi
- 24 juillet 2010 – Scrapbooking - Aline & Animfolie’s
- 27 septembre 2010 – Trident Media Guard ne déclare pas ses comptes...
- 15 mai 2009 – La 32e Foire Saint Germain : La Plongée Culturelle !
- 8 mars 2010 – Acheter un film de contrefaçon dans le métro ?





