Souci multifactoriel avec codage UTF-8 dans localhost (wamp)
Résolu
stephdem
Messages postés
40
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
(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
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:
- Souci multifactoriel avec codage UTF-8 dans localhost (wamp)
- Codage ascii - Guide
- Clé windows 8 - Guide
- Mixcraft 8 - Télécharger - Création musicale
- Codage binaire - Guide
- Internet explorer 8 - Télécharger - Navigateurs
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 :
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"));
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 ?
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 ?
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
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
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
<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
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 à :
Tu n'as pas quelque chose qui ressemble à :
$connexion= new PDO('mysql... ?
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
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