IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Encodage, accents et requête de moteur de recherche


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Encodage, accents et requête de moteur de recherche
    Bonjour à Tous,

    Je sais bien que le sujet a été maintes fois évoqué un peu partout, mais je n'ai pas trouvé de réponse satisfaisante à ma question :

    Ma base SQL est en interclassement utf8_general_ci.
    La table sur laquelle je travaille à mon moteur de recherche est MyISAM est interclassement utf8_general_ci.
    Les pages PHP qui gèrent l'ensemble sont en charset=utf8.

    Quelqu'un peut-il m'expliquer pourquoi, lorsque je fais une bête requête INSERT via un formulaire, tous les mots accentués sont encodés utf8 ? Ce qui donne, côté phpMyAdmin, "bénévole" quand on saisit le mot "bénévole"...Je précise que; au traitement de la requête, je n'utilise pas la fonction utf8_encode.
    Côté affichage site, tout est parfait sans aucun traitement, MAIS :

    Voici 2 requêtes affichées par mon script de moteur de recherche pour le mot "bénévole" :

    1- En faisant un utf8_encode sur le mot-clé à la sortie du form :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE MATCH (nom) AGAINST(CONVERT(_utf8 'bã©nã©vole' USING utf8) IN BOOLEAN MODE)

    Ca matche. Par contre, avec le mot-clé "benevole" : nada.

    2- Sans encodage utf8 du mot-clé :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE MATCH (nom) AGAINST(CONVERT(_utf8 'bénévole' USING utf8) IN BOOLEAN MODE)

    Rien. Et pas plus avec "benevole".

    Je précise que le champ "nom" possède bien un index fulltext.

    Du coup je ne sais pas si je dois modifier toute ma table et transformer tous les caractères utf8 en clair...ce que je ne sais pas forcément faire, et qui pourrirait l'affichage site, sachant qu'en plus je devrais modifier toutes mes requêtes INSERT pour que les accents s'écrivent en clair.
    Ou si je dois modifier ma requête de recherche de mon moteur ? J'ai tente avec regexp :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM jld_produits WHERE (nom REGEXP CONVERT(_utf8 'bénévole' USING utf8) )

    Que dalle, avec ou sans encodage mot-clé, avec ou sans accent. La mouise.
    Bref, je veux bien vos conseils avisés...car mon but est que le moteur matche systématiquement, que l'on saisisse "benevole", "bénévole", "benévole" etc...
    D'avance merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu ne dois pas avoir 'bénévole' dans ta base de données.

    Reprends tous les éléments qui participe à l'insertion des données :
    http://j-willette.developpez.com/tut...-site-en-utf8/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Hello Sabotage, oui c'est ce que je me disais aussi, groumpf
    Après diverses manip plus ou moins hasardeuses (heureusement en local) j'ai exporté la table puis l'ai convertie avec notepad.
    Du coup, super, youpi, j'ai maintenant bénévole écrit en clair dans le champ. Et mon moteur matche bien en fulltext.

    Mais, évidemment, côté site, forcément : B�n�vole


    Et si je dois faire un encode ou decode sur tous les affichages côté php, euh...j'en ai pour 1200 ans.

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Dans l'article que tu me donnes en lien, de Josselin, il y a un truc tout à fait magique : mysql_set_charset( 'utf8' );
    Je pense que je vais pouvoir m'en sortir avec ça. Si je retrouve la manip qui m'a permis d'exporter la table, de l'encoder, de l'importer...
    Merci mille fois à toi.

  5. #5
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bon, en fait je galère et cherche un moyen de nettoyer ma BDD entière d'une seule opération pour remplacer partout les é et autres cochonneries par des é...
    Quelqu'un a une idée ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Une solution est de faire un export et de convertir avec une editeur de texte comme notepad++.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    J'ai essayé plein de fois...
    Mais Notepad a un problème : le changement d'encodage ne semble pas être pris en compte (le "enregistrer" est grisé).
    J'ai du coup copié-collé et au final : comme ma base est très pleine de données texte, la conversion se fait, je vois les accents en clair dans le fichier, mais quand je veux ré-importer, ça bugue au niveau de phpMyAdmin (apostrophes, caractères spéciaux genre o e dans l'o...). Faudrait que je nettoie à la main, mais il y a 30 000 lignes. Bref, l'horreur.

  8. #8
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    J'ai vu cette page : http://www.cdetc.fr/changer-lencodag...donnees-mysql/
    Qui semblait convenir. Mais c'est pour Linux, et pas grand chose ne fonctionne dans la console windows. Et là c'est un terrain inconnu pour moi.

Discussions similaires

  1. Requête SQL moteur de recherche
    Par yeste64 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/07/2011, 17h27
  2. Problème requêtes multiples (moteur de recherche)
    Par kasey dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/08/2009, 23h31
  3. Requête moteur de recherche
    Par yagogak dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/03/2006, 00h28
  4. Réponses: 21
    Dernier message: 01/03/2006, 23h15
  5. Optimiser une requête SQL d'un moteur de recherche
    Par kibodio dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/03/2005, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo