A voir également:
- Problème de charset...
- Data:text/html;charset=utf-8;base64, ✓ - Forum - Webmaster
- Meta charset= utf-8 php - Conseils pratiques - PHP
- Problème de gestion de charset et accents ✓ - Forum - HTML
- Charset Typo3 après changement BDD ✓ - Forum - Bases de données
- Charset=ISO-8859-1 et javascript ✓ - Forum - Javascript
5 réponses
yg_be
- Messages postés
- 13886
- Date d'inscription
- lundi 9 juin 2008
- Statut
- Contributeur
- Dernière intervention
- 14 janvier 2021
bonjour,
je ne vois pas bien le lien entre l'encodage de la table et les données que tu nous montres.
tu pourrais peut-être faire ainsi:
je ne vois pas bien le lien entre l'encodage de la table et les données que tu nous montres.
tu pourrais peut-être faire ainsi:
update recettes set recette = replace (recette, '%20', ' ')
jordane45
- Messages postés
- 31014
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 14 janvier 2021
Bonjour,
Comme tu le vois, je ne suis pas le seul à répondre :-)
Comme le dit yg_be, tu vas devoir éditer le contenu de tes tables pour y remplacer les caractères spéciaux que tu y as mis.
Une fois que ça sera fait, il te restera à :
1 - Modifier le charset de tes tables
2 - Modifier le code php (ou autre langage...) qui te sert à faire les insertions dans ta bdd
Tu y as certainement utilisé des fonctions d'encodage des caractères html genre htmlspecialchars, htmlentities, urlencode ...
Les données, dans une BDD, ne doivent pas subir de traitement avant l'insertion ( on enregistre les données "brutes" )
Il te faudra ensuite t'assurer que lorsque tu utilises les données de ta bdd tu n'utilises pas non plus de fonctionnalités de ce genre (ce qui ajouterait de nouveau des caractères spéciaux dans ta page .. genre utf8-encode ou decode... )
Comme tu le vois, je ne suis pas le seul à répondre :-)
Comme le dit yg_be, tu vas devoir éditer le contenu de tes tables pour y remplacer les caractères spéciaux que tu y as mis.
Une fois que ça sera fait, il te restera à :
1 - Modifier le charset de tes tables
2 - Modifier le code php (ou autre langage...) qui te sert à faire les insertions dans ta bdd
Tu y as certainement utilisé des fonctions d'encodage des caractères html genre htmlspecialchars, htmlentities, urlencode ...
Les données, dans une BDD, ne doivent pas subir de traitement avant l'insertion ( on enregistre les données "brutes" )
Il te faudra ensuite t'assurer que lorsque tu utilises les données de ta bdd tu n'utilises pas non plus de fonctionnalités de ce genre (ce qui ajouterait de nouveau des caractères spéciaux dans ta page .. genre utf8-encode ou decode... )
ephelya
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
Oui, je vois, ça faisait longtemps que personne d'autre que toi ne m'avait pas répondu, je commençais à croire que tu avais le monopole... :D Et au passage, je croyais aussi que tu étais une femme ! :D
En fait je n'ai utilisé aucune formule, aucun encodage, j'ai simplement fait un curl en php et ensuite j'ai tout récupéré en jquery/ ajax pour enregistrer le contenu tel quel dans ma table. utf8-encode ou decode c'était seulement au moment de l'affichage qd j'ai consaté qu'il y avait un pb dans la base.
Du coup peut-être que je devrais, au contraire, "nettoyer" ces contenus par un filter_var ou autre ?
En fait je n'ai utilisé aucune formule, aucun encodage, j'ai simplement fait un curl en php et ensuite j'ai tout récupéré en jquery/ ajax pour enregistrer le contenu tel quel dans ma table. utf8-encode ou decode c'était seulement au moment de l'affichage qd j'ai consaté qu'il y avait un pb dans la base.
Du coup peut-être que je devrais, au contraire, "nettoyer" ces contenus par un filter_var ou autre ?
ephelya
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
Bonjour, merci pour ta réponse ! :-)
Pour le lien, je ne sais pas trop à vrai dire, mais je ne peux que constater que j'ai un pb de charset à l'affichage et qu'en l'occurrence les données n'ont pas été enregistrées au bon format (or elles l'étaient au départ)
Cette option est très bien oui, bonne idée, mais elle est tout aussi longue à coder qu'un str_replace en php. Si il faut je ferais comme ça mais il n'existe pas une formule toute prête pour tout réencoder ? Ce n'est pas un manque de courage mais en fait j'ai surtout peur d'oublier certains caractères et de laisser des erreurs...
Pour le lien, je ne sais pas trop à vrai dire, mais je ne peux que constater que j'ai un pb de charset à l'affichage et qu'en l'occurrence les données n'ont pas été enregistrées au bon format (or elles l'étaient au départ)
Cette option est très bien oui, bonne idée, mais elle est tout aussi longue à coder qu'un str_replace en php. Si il faut je ferais comme ça mais il n'existe pas une formule toute prête pour tout réencoder ? Ce n'est pas un manque de courage mais en fait j'ai surtout peur d'oublier certains caractères et de laisser des erreurs...
jordane45
- Messages postés
- 31014
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 14 janvier 2021
Non, aucune solution toute faite existe pour ça.
Il va te falloir faire les replace en SQL par toi même.
( à faire via l'onglet SQL de ton phpmyadmin .... pas via un langage php... )
NB: Pour t'aider à savoir quoi remplacer.. il faudrait déjà nous montrer le code qui te sert à faire ces enregistrements dans ta bdd... ça devrait donner de bonnes pistes...
Il va te falloir faire les replace en SQL par toi même.
( à faire via l'onglet SQL de ton phpmyadmin .... pas via un langage php... )
NB: Pour t'aider à savoir quoi remplacer.. il faudrait déjà nous montrer le code qui te sert à faire ces enregistrements dans ta bdd... ça devrait donner de bonnes pistes...
ephelya
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
- Messages postés
- 13886
- Date d'inscription
- lundi 9 juin 2008
- Statut
- Contributeur
- Dernière intervention
- 14 janvier 2021
Oui, l'exemple que j'ai donné c'est ce qui est enregistré ds la base, pas simplement ce qui s'affiche. C'est pour ça que j'ai essayé de l'interpréter pr qu'il s'affiche correctement mais sans succès...
Je ne vois pas du tout à quel moment ça a déconné pcq je procède de la même façon pr enregistrer les ingrédients(ds une autre table mais avec les mêmes paramètres) et là tout est nickel...
Je ne vois pas du tout à quel moment ça a déconné pcq je procède de la même façon pr enregistrer les ingrédients(ds une autre table mais avec les mêmes paramètres) et là tout est nickel...
ephelya
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
Oui c'est clair que déjà en passant par phpmyadmin et en faisant toute la table d'un coup, je vais gagner bcp de temps. Sur 100 000 lignes, je ne vais pas détailler, il faut simplement que je change tous les caractères spéciaux, en gros, mais c'est là que je veux être sûre de n'en oublier aucun.
Mon code est un peu long et il y a plusieurs versions selon la source pcq je suis en train de scraper plusieurs sites pour me faire un outil de nutrition perso. Pour résumer il y a d'abord un curl en php puis je récupère le contenu en jquery / ajax, mais les scripts changent selon le site scrapé...
Du coup je ne sais même pas quoi te montrer. Par contre une fois la base nettoyée, il ne servira plus, normalement (100 000 recettes, ça me suffit je pense.... ;-) )
Mon code est un peu long et il y a plusieurs versions selon la source pcq je suis en train de scraper plusieurs sites pour me faire un outil de nutrition perso. Pour résumer il y a d'abord un curl en php puis je récupère le contenu en jquery / ajax, mais les scripts changent selon le site scrapé...
Du coup je ne sais même pas quoi te montrer. Par contre une fois la base nettoyée, il ne servira plus, normalement (100 000 recettes, ça me suffit je pense.... ;-) )
yg_be
- Messages postés
- 13886
- Date d'inscription
- lundi 9 juin 2008
- Statut
- Contributeur
- Dernière intervention
- 14 janvier 2021
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
si tu veux faire des essais sans utiliser nos suggestions, pourquoi viens-tu ensuite t'étonner que cela ne fonctionne pas?
ephelya
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
- Messages postés
- 13886
- Date d'inscription
- lundi 9 juin 2008
- Statut
- Contributeur
- Dernière intervention
- 14 janvier 2021
Ben j'ai utilisé ta suggestion en premier et c'est justement parce que ça ne fonctionnait pas que j'en ai tenté une autre... :/
Mais j'ai résolu ou plutôt contourné le problème. J'ignore pourquoi ça refusait de faire l'update sur des lignes qui étaient par ailleurs reconnues mais ça a fonctionné en mettant E9 au lieu de e9, par exemple. Je crains d'avoir qd même des problèmes de minuscules / majuscules à l'arrivée, mais le css réglera ça sans difficulté
Mais j'ai résolu ou plutôt contourné le problème. J'ignore pourquoi ça refusait de faire l'update sur des lignes qui étaient par ailleurs reconnues mais ça a fonctionné en mettant E9 au lieu de e9, par exemple. Je crains d'avoir qd même des problèmes de minuscules / majuscules à l'arrivée, mais le css réglera ça sans difficulté
ephelya
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
et par ailleurs c'est aussi très rapide dc je vais pouvoir mettre à jour ma table sans difficulté.
Merci beaucoup pour ton aide, voilà un gros obstacle de résolu ! :)
Merci beaucoup pour ton aide, voilà un gros obstacle de résolu ! :)
yg_be
- Messages postés
- 13886
- Date d'inscription
- lundi 9 juin 2008
- Statut
- Contributeur
- Dernière intervention
- 14 janvier 2021
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
peux-tu alors marquer la discussion comme résolue?
yg_be
- Messages postés
- 13886
- Date d'inscription
- lundi 9 juin 2008
- Statut
- Contributeur
- Dernière intervention
- 14 janvier 2021
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
quand tu fais le
tu vois bien si c'est e9 ou E9 qui est présent.
il suffit ensuite de faire la requête correcte avec la fonction REPLACE.
le comportement que tu observes est normal, parce que INSTR n'est pas sensible à la casse.
SELECT titre from recettes where instr(titre, '%') >0,
tu vois bien si c'est e9 ou E9 qui est présent.
il suffit ensuite de faire la requête correcte avec la fonction REPLACE.
le comportement que tu observes est normal, parce que INSTR n'est pas sensible à la casse.
ephelya
- Messages postés
- 249
- Date d'inscription
- mercredi 28 septembre 2011
- Statut
- Membre
- Dernière intervention
- 4 janvier 2021
idem avec la requête telle que tu l'as écrite
(mais ça reconnait bien les lignes si je fais un select)
update recettes set titre = replace(titre, '%e9', 'é') where instr(titre, '%e9') > 0
(mais ça reconnait bien les lignes si je fais un select)