Encodage

Petit nouveau ! | 3 Messages

04 août 2015, 09:45

Bonjour à tous,
Je suis nouveau sur le forum, nouveau pour le questionner car j'y suis souvent venu puiser des connaissances. Merci pour le partage de vos connaissances.

j'ai un souci d'encodage, et je pense sur l'encodage du traitement par PHP.

Je travaille en local avec le WAMP : version 2.5
apache : version 2.4.9
PHP : version 5.5.12
MySQL : version 5.6.17
Navigateur : Firefox à jour

Mon éditeur est NotePad++ avec un encodage par défaut de mes fichiers en utf-8(sans BOM).
Ma base de données est créée de la façon suivant : CREATE DATABASE huitre CHARACTER SET 'utf8';
Mes fichiers PHP commence par la ligne, avant le DOCTYPE, : header( 'content-type: text/html; charset=utf-8' );
Dans mes scripts PHP, la connexion se fait par un fichier dédié introduit par la fonction include.

Code : Tout sélectionner

$bdd = new PDO('mysql:host=localhost;dbname=huitre;<code><span>charset=UTF8;</span></code>', 'root', '');
  • L'encodage est bon lorsque les données sont insérer avec mon fichier donnee.sql (fichier d'exemple)
  • L'encodage est bon lorsque j'écris du texte html dans un fichier php : mardi 4 août 2015 pas de souci
  • L'encodage n'est pas bon lorsque la fonction

    Code : Tout sélectionner

    setlocale (LC_TIME, 'fr_FR.utf8','fra');
    renvoie la date, le û devient �
  • L'encodage n'est pas bon lorsque je remplis ma base de données par mes formulaires
J'ai vérifier le fichier php.ini dans la section data handing

Code : Tout sélectionner

PHP's default character set is set to empty. ; http://php.net/default-charset ;default_charset = "UTF-8"
Que faire...
Merci par avance de votre aide
Noël

Eléphant du PHP | 243 Messages

04 août 2015, 15:50

Le problème ne vient pas du setlocale, mais de la ligne qui permet l'affichage, c'est à dire le strftime.
strftime ne traite pas les données en utf8. Je te conseil donc de passer sous l'encodage UTF-8 et d'utiliser le code suivant :

Code : Tout sélectionner

utf8_encode(strftime("%A %d %B %Y"));
J'espère ne pas avoir dit de bêtises :x
Et puis, j'aime pas les encodages :cry:
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

04 août 2015, 18:54

Bonjour,

Il faut que tu vérifies tes noms de locales mais il me semble que pour le français en utf8, UTF8 est en majuscule :
setlocale (LC_TIME, 'fr_FR.UTF8','fra');
Toutefois comme Windows gère moins bien l'utf8, il est possible que ça ne fonctionne pas mieux et donc la solution de Ascla devrait fonctionner ou en dernier recours, tu devrais pouvoir passer par iconv() cf les commentaire de la doc sur la fonction strftime()
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

05 août 2015, 07:50

Bonjour Ascia,
Bonjour @rthur, merci pour votre collaboration

Bonjour à tous,

Bien vu Ascia, en rajoutant utf8_encode plus de souci pour la date. Par contre que utf8 soit en minuscule ou en majuscule cela n'apporte aucun changement. Je préfère le conseil d'@rthur et je passe en majuscule.

Reste le problème de la base de donnée, lorsque j'insère des informations par mes formulaires PROBLEMES, lorsque les données sont transmise par mon fichier d'exemples sql PAS DE PROBLEMES...
Par contre les données de mon formulaire dans la base de données sont bonnes si j'encode le fichier formulaire en ANSI, tous les caractères sont bons. Comme le signale @rthur, Windows gère moins bien l'utf8 et peut-être que le problème vient de là... PHP possède t'il une solution pour ce problème ?

Pour le moment, j'ai tellement fait de modifications sur mon application, que je repars de 0 sur mes 2 tables tests ainsi que tous les fichiers qui les accompagnent en espérant trouver la solution pour me permette d'avancer; Je n'ai pas trop envie de continuer en sachant qu'il y a souci...

Je suis preneur de toute solution.
A bientôt.
Noël

Petit nouveau ! | 3 Messages

05 août 2015, 19:33

Bonjour à tous,

j'ai trouvé qqle chose pour résoudre mon problème, ce n'était que des erreurs de syntaxe , voici la bonne syntaxe :
Le fichier de connexion

Code : Tout sélectionner

$bdd = new PDO('mysql:host=localhost;dbname=huitre;charset=utf8', 'root', '');
L'entête

Code : Tout sélectionner

header('content-type: text/html; charset=utf-8');
Et une erreur de quote sur le méta

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
L'encode des fichiers est en utf-8(sans BOM) et le navigateur affiche l'encodage du texte en unicode alors qu'auparavant c'était en occidental.
J'attends un jour ou deux pour voir que tout fonctionne et je cloture ce sujet. Bien sur, si certaines personnes ont d'autres propositions, je prends.
Noël