Souci multifactoriel avec codage UTF-8 dans localhost (wamp)

Résolu/Fermé
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019 - 21 déc. 2016 à 14:42
 Utilisateur anonyme - 26 déc. 2016 à 20:44
(note: je suis indécise quant à la place de ce problème dans un des sous-forums, mais comme tout part de MySQL...)


Bonjour,


Au moment de mettre en ligne un nouveau site basé sur MySql je m’aperçois qu’il y a un problème important de codage de caractères.

On travaille sur Excel 2007, qui avec des VBA génère des fichiers csv, qui sont ensuite encodés en UTF-8 sans bom via notepad++ (encodage, convertir…) et qui enfin génèrent les tables avec la commande SQL load data infile.
Le problème concerne tous les caractères spéciaux !
Ils ne s’affichent pas correctement sur Internet, pas correctement sur LocalHost sur mon ordi avec wamp, alors qu’ils s’affichent parfaitement sur Excel et qu’ils s’affichent correctement dans les tables MySql de PHPmyAdmin.
Tous ces caractères s’affichent avec un carré vide à la place de é, è, °, etc.
Or avec html5, le codage UTF-8 est quasi-obligatoire.
J’ai passé le weekend à scruter Internet et les forums, et le problème a l’air bien compliqué et de causes multiples.
Je n’ai rien trouvé directement lié à un transfert de Excel (2007) même si les fils sur le sujet du transfert de ISO-8859-1, ISO-8859-15, et Windows-1252 vers UTF-8 sont nombreux et j’aimerai avoir votre avis et des pistes.

J’ai déjà essayé un freeware CP converter (échec, c’est pire) et une astuce du web qui consiste à enregistrer le fichier Excel en fichier texte unicode, puis d’ouvrir ce fichier via notepad++ puis de l’encoder en UTF-8 sans bom (re-échec).

J’ai essayé autre chose qui pourrait vous mettre sur la piste (c’est un pis aller).
J’ai changé dans le code de la page de UTF-8 à <meta charset="ISO-8859-15"> et j’ai ré-encodé la page an ANSI avec notepad++… et là tout devient normal (le texte de la BDD est bien affiché, notamment les caractères spéciaux) dans localhost (même si la BDD est toujours en UTF-8 et que les include variés de la page sont en UTF-8).

Tout semblerait se passer comme si tout était libellé en UTF-8 mais que non le codage des caractères serait resté en ANSI ou ISO-8859-15 ou plus probablement en codage maison Microsoft.

Enigmatique !

Merci de votre aide pointue.

A+

Steph



A voir également:

8 réponses

Dans cette opération de connexion à mysql, il faut préciser que tu utilises l'UTF-8, même si tes tables ont déjà cet encodage. C'est étonnant, je suis d'accord, mais c'est ainsi.
Une des syntaxes possibles consiste à ajouter un array d'options en guise de 4e paramètre lors de la connexion :
$connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe, array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
1
Bonjour

Juste pour vérification, peux-tu nous mettre sur cjoint.com (ou autre) un de tes fichiers csv encodés en utf-8 ? Quelque chose qui ne soit pas confidentiel, évidemment.
Autre précision, quelle est la collation de tes tables mysql ?
Et lors de ta connexion à mysql dans ton php, précises-tu bien le charset utf-8 ?
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
21 déc. 2016 à 17:17
Bonjour,

Le site est en production donc confidentiel et les csv de chaque table font plusieurs millions d'octets.
A la rigueur si intérêt ce serait possible de prendre un csv et de ne garder que les 2 premières lignes, une ligne avec des caractères spéciaux et la dernière ligne.

Pour la collation de la base et des tables c'est utf8_general_ci

Pour la dernière question je ne comprend pas, dans wampserver je vais dans localhost et j'appelle une page qui toutes commencent par
<meta charset="UTF-8">

A+, Steph
0
Utilisateur anonyme
21 déc. 2016 à 17:29
Effectivement, quelques lignes pourraient suffire si elles comportent des caractères non ASCII. Mais finalement, c'est inutile si tes tables mysql ont bien une collation utf8 et que leur contenu s'affiche correctement avec PHPMyadmin.
Pour le point que tu ne comprends pas, il s'agit de la connexion à la base de données, il y a une option à mettre pour indiquer que les données seront transmises en utf-8. Peux-tu montrer le code que tu utilises pour la connexion à mysql, sans le mot de passe évidemment ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
21 déc. 2016 à 18:08
Le fichier .php de connexion est dans un require
<php
$param_hote='localhost';
$param_port='3306';
$param_nom_bd='blablamysql';
$param_utilisateur='root';
$param_mot_passe='xxx';
?>

J'ai un autre fichier pour le test en ligne.

Voilà?

A+
Steph
0
Utilisateur anonyme
21 déc. 2016 à 18:21
Tu n'as donné qu'une liste de variables. Qui interviennent dans la connexion, soit, mais il manque la connexion proprement dite.
Tu n'as pas quelque chose qui ressemble à :
$connexion= new PDO('mysql...
?
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
22 déc. 2016 à 18:03
Bonjour,

Ah si, bien sûr j’ai la ligne suivante dans chaque fichier :

$connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);

Dans le code complet suivant

<?php
error_reporting(E_ALL);
require ("aaaaaa.php");
try {
$connexion = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
} catch (Exception $e) {
echo 'Erreur : ' . $e->getMessage() . '<br />';
echo 'N° : ' . $e->getCode();
}
A+

Steph
0
stephdem Messages postés 36 Date d'inscription mardi 7 avril 2009 Statut Membre Dernière intervention 30 octobre 2019
26 déc. 2016 à 14:52
Bonjour le Père,

çà marche nickel... un vrai miracle.
Et je n'avais pas lu cette clause dans mes bouquins MySQL!

Merci !

C'est résolu.

Bonnes fêtes !

Bises.

Steph
0
Utilisateur anonyme
26 déc. 2016 à 20:44
De rien :-)

Bonnes fêtes et bises aussi.
0