Suite à un changement d'ordinateur et la réinstallation de MAMP. un site qui affichait du texte en arabe se met à afficher des choses étanges.
- version de php 5.6.30 (j'ai baissé pour revenir à l'ancienne ça ne change rien) c'est identique à php v.7 - version de mysql : 5.6.35 - encodage de la base et des colonnes : utf8_general_ci (en fait la base n'a pas changé, entre l'ancienne et la nouvelle version) - le site n'a pas changé non plus
mode de connexion à la base
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host='.$nom_du_serveur.';dbname='.$nombase.'', $utilisateur, $p, $pdo_options);
$reponse = $bdd->query('SELECT * FROM wh_page_kalei WHERE id = 0');
while ($donnees = $reponse->fetch())
{
Est-ce que quelqu'un aurait une idée de comment résoudre cela ?
Il semble que cela vienne de l'export (depuis le serveur) ou de l'import (en local) car quand je re-entre du texte arabe dans ma base, je n'ai pas ce problème.
Pourtant la base qui me sert de sauvegarde (la version en ligne) ne pose pas de problème d'affichage.
et quand j'exporte cette base (via phpmyadmin) je coche bien utf8
Les données sont correctes en bdd au moins à la base ?
Ton navigateur, dans le menu Affichage > Encodage ou similaire, il affiche quoi ?
Dans ta boucle while, tu n'appliques pas non plus un traitement à tes chaînes qui ne seraient pas compatibles avec UTF-8 ?
Ce que tu nous montres est affiché comme de l'ISO-8859-1 ou alors c'est de l'UTF-8 réencodé en UTF-8 avec du latin1 pour pivot.
EDIT pour répondre à l'edit :
> Il semble que cela vienne de l'export (depuis le serveur) ou de l'import (en local)
L'export commence par un SET NAMES utf8; ?
> Pourtant la base qui me sert de sauvegarde (la version en ligne) ne pose pas de problème d'affichage.
Ca ne veut rien dire : les données peuvent être "corrompues" et s'afficher normalement par un heureux hasard de circonstances disons (type la connexion est en latin1 pour des données en utf8(mb4) - réellement - quand MySQL stocke les données en utf8(mb4), du fait de la conversion latin1 => utf8(mb4) - au lieu de ne pas en faire car la connexion devrait être en utf8(mb4) - aux INSERT/UPDATE et l'inverse - utf8(mb4) => latin1, toujours quand il ne devrait pas en faire - au SELECT, ça peut donner l'impression que c'est correct alors que ce n'est absolument pas le cas).
J'ai une version du site et de la base en ligne qui fonctionne parfaitement. une version en locale avec les mêmes fichiers php, html… j'exporte la base de données qui est en ligne et je l'importe en locale et là tout déconne.
mêmes fichiers, même navigateur
Je n'ai pas de traitement sur le texte à l'intérieur de la boucle while
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host='.$nom_du_serveur.';dbname='.$nom_de_la_base.';charset=utf8mb4', $nom_utilisateur, $passe, $pdo_options);
$reponse = $bdd->query('SELECT * FROM wh_page_kalei WHERE id = 0');
while ($donnees = $reponse->fetch())
{
echo $donnees['titre_1_ar'];
j'ai bien la ligne suivante vers le début de l'export :
> J'ai une version du site et de la base en ligne qui fonctionne parfaitement.
Je répète que ça ne veut rien dire : ce sont les données qu'il faut regarder (la manière dont elles sont encodées), surtout si tu as commis la même bourde en ne précisant aucun jeu pour ta connexion entre MySQL et PHP/PDO sur cet autre serveur de prod !
Est-ce que quand tu exportes cette bdd, les données sont encodées dans le jeu demandé et/ou correspondent au SET NAMES de ce dump ? Est-ce que quand tu consultes ces données sur ce serveur de prod dans pma ou autre client (ton site exclus), elles ressortent correctement ? Si ce n'est pas le cas, ne cherches pas plus loin, le problème d'origine est sur ce serveur parce que tu as commis la même erreur.
Si je comprends bien l'affaire du "heureux hasard" il faudrait que ma base soit en utf8_general_ci de bout en bout. Je vais tout harmoniser et voir si ça s'arrange. Même si ça fonctionne en ligne.
tu remets ton site en ligne avec un ;charset=utf8 (ou utf8mb4)
> En fait je pense que le soucis vient du fait que les tables sont en latin et que les entrées en utf8
C'est ce que je décris depuis le départ : ton application en prod tourne également sans jeu de caractères explicité. Ainsi tu hérites du jeu de caractères par défaut de MySQL qui s’avérerait être latin1 pour un site et des données en UTF-8, ce qui ne colle pas.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli