8795 sujets

Développement web côté serveur, CMS

Bonjours à tous,
Lorsque je veux faire une recherche pour trouver le mot "péhpé",
si je tape le mot "pehpe" dans le moteur de recherche , aucun mot n'est trouvé,
pour trouver le mot "péhpé" je doit faire une recherche avec le mot "péhpé" uniquement.

Voici la structure de ma table

DROP TABLE IF EXISTS 'livres';
CREATE TABLE 'livres' (
'isbn' char(13) NOT NULL,
'auteur' varchar(50) DEFAULT NULL,
'titre' varchar(50) DEFAULT NULL,
'prix' float(4,2) DEFAULT NULL,
PRIMARY KEY (`isbn`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Le moteur de recherche contient une simple requête de séléction et quelque ligne de code pour l'affichage.

Ma quéstion comment trouver le mot "péhpé" avec le mot pehpe.
Modifié par perfectionniste (02 Dec 2011 - 03:02)
Je croi que j'ai pas posté dans le bon forum désolé.

Sinon un habitué du site peux t-il me diriger vers une discution qui résolu se problème Smiley rolleyes
Il faut que tes tables MySQL aient un interclassement de type "general" et insensible à la casse (ci). utf8_general_ci, latin1_general_ci, etc...
Modifié par jb_gfx (03 Dec 2011 - 19:08)
Bonjour,

Le problème n'est pas nouveau. Pour s'en convaincre, il suffit de regarder ICI.
Peut-être une solution Smiley cligne .
Cordialement
jb_gfx:
J'ai refait ma table de cette façon :

DROP TABLE IF EXISTS `livres`;
CREATE TABLE `livres` (
`isbn` char(13) COLLATE utf8_general_ci NOT NULL,
`auteur` varchar(50) COLLATE utf8_general_ci DEFAULT NULL,
`titre` varchar(50) COLLATE utf8_general_ci DEFAULT NULL,
`prix` float(4,2) DEFAULT NULL,
PRIMARY KEY (`isbn`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

Ajouter des données mais toujours rien , si je tape pehpe le moteur ne trouve rien.

iddsoft, j'ai bien lu cette discution et d'aprés se que j'ai compris il faut configurer corectement MySQL et c'est se que j'essaye de faire sans résultat ...
quand tu tapes dans un moteur de recherche de quelques lignes soit.

mais il peut s'en passer des choses dans "quelques lignes".

Si tu fais la même requête via un logiciel de gestion mysql
(phpmyadmin,heidisql,mysql workbench,la ligne de commande... par exemple )

as tu le même résultat?
J'ai récréer la base de données et la table avec l'interclassement utf8_general_ci. Et la page de mon formulaire contient la balise suivante
<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>

Effectivement CPascal , avec phpmyadmin les deux requêtes suivantes trouve bien le titre qui contient le mot "péhpé" :

SELECT * FROM livres WHERE titre LIKE '%pehpe%';

SELECT * FROM livres WHERE titre LIKE '%péhpé%';

Parcontre, dans mon petit moteur de recherche , lorsque je tape le mot "pehpe" il me trouve le titre cette fois mais il m'affiche des ? à la place des é Smiley eek

et lorsque je fait une recherche avec le mot péhpé aucun résultat trouvé cette fois Smiley eek .
Modifié par perfectionniste (03 Dec 2011 - 20:59)
humpf

un problème d'encodage, ça me rappel comme ma journée de galère d'hier ça.

quand tu mets pehpe ça marche parce que ISO ou utf8 le e s'encode pareil.
mais pour le é c'est très différent.

tellement qu'un é s'encode sur 2 caractéres en utf8 alors qu'il est en un seul en ISO.

le fait que tu obtienne des ? pour des é sur un page semble laisser croire
(mais y a jamais rien de certain en la matière) que:

1/ pour le 1er Smiley eek que tu as des é en ISO qui s'affiche sur une page utf8
ta base de donnée bien qu'encoder en utf-8 doit te renvoyer les données sous format ISO

essaie de forcer le mode d'envoi
//nécessaire seulement après la connection
mysql_query("SET NAMES 'utf8'");

2/ pour le 2eme Smiley eek ton mot de recherche terme_recherche est lui aussi en iso (ou dans un encodage différent de celui de ta base).

essaie de faire des var_dump dans ton code pour voir si la variable est bien récupérer par le $_POST sous le bon format. et si c'est le cas où ça change.

imaginons que $_POST te renvoie un truc avec des ? . tu peux essayer un coup de utf8_encode.

question complémentaire: tous tes fichiers sources sont sous quel encodage?

y a sur alsacréations moulte et moulte infos la dessus. mais un peu pele-méle malheureusement.

Bon courage
Modifié par CPascal (03 Dec 2011 - 23:44)
Cpascal effectivement en forçan le mode d'envoi

comme ceci :
$db->query("SET NAMES 'utf8'");


ça fonctionne parfaitement. Sinon j'ai aucun autre fichiés source .

Mais j'ai encore quelque quéstion :

1e) Comment MySQL fait pour savoir que un è peux signifier un é, un ê ou e .
Ou alors qu'un e peux signifier un é, un ê ou un è. Remplace t'il les é , les è et les ê par un
e pour pouvoir séléctionner le mot rechérché sans tenir compte des accents ?

2eme) Utiliser une fonction pour oter les accents est-ce utile dans le cadre d'un moteur de recherche ?

2eme) Pourquoi ma base de donnée bien qu'encoder en utf-8 me renvoyer les données sous format ISO ?
Modifié par perfectionniste (04 Dec 2011 - 05:03)
bizarre que le set est résolu les 2 problèmes. ton unique fichier est bien encodé en utf8?

sinon pour les questions pièges.
1)
c'est une histoire de collation que je crois on peut traduire par classement en français.
donc ça doit revenir a ça.

certain encodage vont se voir comparer en binaire é et e different alors
et d 'autre compare juste le classement

la doc mysql dit notamment : "For example, if “e” and “é” have the same sort value in a given collation, they compare as equal".

2) j'ai envie de dire non.( ce n'est que mon choix personnel )
tu dois réussir a maîtriser ton encodage et ta base. si tous va bien de ce coté je ne vois plus a quoi sert la fonction.
si tu traites tous ça par fonction c'est du bricolage et y a des chances qu'un jour tu t'en mordent les doigts.

3)
Mysql a pleins de variables par défaut en latin1 ou latin1_swedish_ci (mysql est fait par des suedois)
je suppose que tu as le bon encodage pour ta table
mais que quand tu as créé ta base tu n'as pas configuré l'utf8.

j'utilise heidisql (notamment) pour voir mes bases car il y a un onglet "sympa" où tu vois les 325 variables de configuration de la base.
sur ma base de test il y a au moins 10 variables concernées. la moitié sont en latin et l'autre en utf8 ...
ok merci et juste une derniere quéstion , pour voir les variables de configuration de la base on peux utiliser des commandes SQL au lieu d'utiliser heidisql ?