problème d'accent lors d'une requete SQL

Eléphanteau du PHP | 11 Messages

08 janv. 2012, 02:23

Bonjour,

Rapide présentation puisqu'il s'agit de mon 1er Post :
Je m'appel Mickael, je suis un jeune webmaster franc-comtois récemment installer
en tant que freelance (auto-entrepreneur), et je suis ravi d'avoir trouvé un site
dédié à mon couple favori : PHP/MySQL !!

Pour ce qui est de mon premier problème,
tout est dans le titre : "problème d'accent lors d'une requête SQL" !

Exemple : dans une table listant des catégories d'appareil, je veux retrouver l'ID du
catégorie par le biais de son nom, en gros je peux donc faire :
SELECT id FROM categories WHERE name = "le nom"
Si je recherche "Consoles de Jeu", ça fonctionne, mais si je recherche "Téléviseurs", ça ne fonctionne pas,
cela viendrait donc d'un problème d'accents, donc d'encodage, mais je n'arrive pas à le résoudre,
si quelqu'un à la soluc', merci de me renseigner

J'ai déjà essayé de mettre ça :
header('Content-Type: text/html; charset=utf-8'); ET
mysql_query("SET NAMES 'utf8'", $conn); mais ça ne fonctionne pas mieux...

MICKAEL

ViPHP
AB
ViPHP | 5818 Messages

08 janv. 2012, 04:30


J'ai déjà essayé de mettre ça :
header('Content-Type: text/html; charset=utf-8'); ET
mysql_query("SET NAMES 'utf8'", $conn); mais ça ne fonctionne pas mieux...

MICKAEL
Il faut mettre ces lignes uniquement si tu travaille en utf-8.
Si donc c'est le cas il faut effectivement mettre ces lignes, ou si tu as PHP 5 >= 5.2.3 et MySQL 5 >= 5.0.7 il est préférable de mettre
mysql_set_charset( $conn,'utf8'); 
à la place de
mysql_query("SET NAMES 'utf8'", $conn); 
Mais le problème vient certainement d'ailleurs...
Essayes de mettre le champ de ta base de données avec l'interclassement "utf8_general_ci".

Si le pb persiste regarde si tu as suivi toutes les étapes de ce tuto

Eléphanteau du PHP | 11 Messages

08 janv. 2012, 11:45

Bonjour AB !

Merci pour ta réponse et pour ce super tuto qui m'a permis de bien éclaircir les choses...

Alors en fait j'ai ça :

détection de l'encodage avec mb_detect_encoding() qui donne : "UTF-8"
ma chaine de caractère tel que soumise : "TV – Vidéo – TNT – Satellite"
ma chaine de caractère après un utf8_encode() : "TV – Vidéo – TNT – Satellite"
ma chaine de caractère après un utf8_decode() : "TV – Vidéo – TNT – Satellite"

Je soumet au script SQL ma chaine de caractères encodée en UTF , soit "TV – Vidéo – TNT – Satellite"
et ça ne marche toujours pas, la lecture de ma BDD reste sans résultat !!

Alors je ne sais pas exactement si cela correspond à l'encodage mais l'interclassement de ma BDD est fait en "utf8_general_ci"...

Est ce que la présence de ça :"€“" dans ma chaine de caractère en UTF-8 est normal ??

ViPHP
AB
ViPHP | 5818 Messages

09 janv. 2012, 02:52

Est ce que la présence de ça :"€“" dans ma chaine de caractère en UTF-8 est normal ??
Non c'est pas normal.

Par ailleurs si tout est encodé en utf-8 (header de la page, balise meta, requête sql pour spécifier l'encodage etc.) tu n'as pas besoin d'utiliser utf8_encode() ni utf8_decode() !! (sauf pour éventuellement importer des données externes à ton site).