Bonjour,

Je suis en train de me battre avec l'actualisation d'une GROSSE application codée en PHP et MySQL.
Les fichiers - tels que je les ai récupérés - étaient dans cet état :

DB et tables de la DB : latin1_swedish
Code HTML meta charset iso-8859-1
Malgré cette horreur, les accents apparaissent à l'écran tout à fait normalement - le comment m'échappe un peu - mais la DB (dump SQL) est truffée de symboles obscurs tels que : ?†, ?©, ?® ...

Toutefois, j'essaie d'avoir quelque chose de cohérent : soit des codes HTML (é , &agrave, ...) ou les graphèmes tels quels (é, à, ...).

J'ai donc :
- transformé la DB - général - en UTF-8
- transformé chaque table en UTF-8
- mis des meta charset utf-8 dans tous mes codes HTML
- converti tout mon dump en faisant des search-replace sur tous les caractères farfelus pour les transformer en codes HTML
- et tenté ceci :
$link=mysqli_connect($server, $login, $password);
$link->set_charset("utf8");


Le set_charset("utf8") stocke alors les accents en clair (é, à, è...) mais par contre... Dans le navigateur, le contenu est tout pété :
15:50:10 test avec des accents héhé
(quand je commente la ligne $link->set_charset("utf8"); tout revient à la normale dans le navigateur, mais la base de données accueille des caractères inopportuns : désiré

Du coup, je suis perplexe...
Auriez-vous des idées pour m'aider à solutionner ce problème?

D'avance, merci pour votre aide.
Modifié par Reka (10 Jun 2016 - 16:46)
J'imaginais qu'il y avait moyen d'éviter de placer des utf8_encode à chaque texte à afficher, mais on va faire comme ça donc... !
Merci Jencal. Bonne soirée.
utf8_encode/decode, ce n'est pas une bonne solution à long terme, oublie ces fonctions. C'est un peu le scotch et le chewing-gum de Mc Giver, sans l'expertise de Mc Giver.

Qu'est-ce que tu utilises pour regarder le contenu de la base ?
Si c'est PhpMyAdmin, méfiance, il fait parfois de la merde. La vérité vraie ne se dévoile qu'avec le client en ligne de commande !

Avec quel logiciel as-tu ouvert ton dump ? a-t-il été ouvert avec le bon encodage, et a-t-il été effectivement enregistré en UTF-8 ?
Jouer des remplacements manuels de é vers é ou l'inverse est rarement la bonne solution.

D'après ce que tu indiques, je conclus que tu as oublié deux choses :
1 - LE set names utf8 à exécuter juste après la connexion
2 - Tu as mis un <meta charset="utf-8" />, mais une partie au moins de ta page fonctionne toujours en ISO. Tu as donc probablement oublié un en-tête HTTP approprié Content-Type: text/html; charset=utf-8
J'ai un problème avec une base Mysql gérée avec PhpMyAdmin.
Elle est en French (iso-8859-1)
Version du client MySQL: 5.5.52
Je ne sais pas exactement quelle est la version de PhpMyAdmin...
En tous cas, depuis quelques temps, lorsque je consulte mes enregistrements par PhpMyAdmin, tous les champs qui contiennent des caractères accentués apparaissent vides...
Si je modifie l'encodage de la base en utf-8 et que j'entre un nouvel enregistrement, il ne disparaît pas dans PhpMyAdmin.
J'ai fait une sauvegarde de ma base (18.000 enregistrements), il me faudrait donc maintenant ré-entrer tous ces enregistrements ...mais manuellement !
Si je savais créer un script de lecture-écriture !
Quelqu'un sait-il ?
et accepterait de me dépanner ?
Je lance une bouteille à la mer...Merci de votre aide.
Reka a écrit :
Bonjour,

Je suis en train de me battre avec l'actualisation d'une GROSSE application codée en PHP et MySQL.
Les fichiers - tels que je les ai récupérés - étaient dans cet état :

DB et tables de la DB : latin1_swedish
Code HTML meta charset iso-8859-1
Malgré cette horreur, les accents apparaissent à l'écran tout à fait normalement - le comment m'échappe un peu - mais la DB (dump SQL) est truffée de symboles obscurs tels que : ?†, ?©, ?® ...

Toutefois, j'essaie d'avoir quelque chose de cohérent : soit des codes HTML (&amp;eacute; , &amp;agrave, ...) ou les graphèmes tels quels (é, à, ...).

J'ai donc :
- transformé la DB - général - en UTF-8
- transformé chaque table en UTF-8
- mis des meta charset utf-8 dans tous mes codes HTML
- converti tout mon dump en faisant des search-replace sur tous les caractères farfelus pour les transformer en codes HTML
- et tenté ceci :
$link=mysqli_connect($server, $login, $password);
$link-&gt;set_charset("utf8");


Le set_charset("utf8") stocke alors les accents en clair (é, à, è...) mais par contre... Dans le navigateur, le contenu est tout pété :
15:50:10 test avec des accents héhé
(quand je commente la ligne $link-&gt;set_charset("utf8"); tout revient à la normale dans le navigateur, mais la base de données accueille des caractères inopportuns : désiré

Du coup, je suis perplexe...
Auriez-vous des idées pour m'aider à solutionner ce problème?

D'avance, merci pour votre aide.

Bonjour,
C'est possible en Java (mais aussi en PHP ou autre langage).
Java étant mon environnement de prédilection, pourrais tu m'envoyer un exemple de chaîne alphanumérique avant / après pour que j'y jette un coup d'oeil ?
A priori une classe Java auto exécutable devrait pouvoir faire cette conversion via JDBC en une seule passe.
Vu le nombre d'enregistrements à traiter ce pourrait être, effectivement, un bon investissement...
Une fois le jeu de test reçu, je confirmerai / infirmerai la faisabilité.