[RESOLU] Accent en erreur dans un format date

Eléphant du PHP | 108 Messages

17 mai 2021, 14:19

Bonjour à toutes et à tous,

J'affiche une colonne avec une date.

J'ai trouvé ceci
<?php 
                  if (setlocale(LC_TIME, 'fr_FR') == '') {
                    setlocale(LC_TIME, 'FRA');  //correction problème pour windows
                    $format_jour = '%#d';
                } else {
                     $format_jour = '%e';
                }
                echo strftime("%a $format_jour %h %Y",strtotime($liste_day['date_trade']));
         ?>
Cela fonctionne très bien excepté pour les mois avec accents ou j'ai un ? pour l'accent aïgu.

Le head de ma page est le suivant.
<!doctype html>
<html lang="fr">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Merci d'avance pour votre aide.

Bonne journée.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 mai 2021, 07:19

Ton serveur web n'est peut être pas configuré pour envoyer les pages HTML en utf8.
Essaye d'ajouter ça en début de page :
<?php
header('Content-type: text/html; charset=utf-8');
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 108 Messages

18 mai 2021, 07:38

Bonjour @rthur,

Toujours le même problème.

Merci.

Eléphant du PHP | 108 Messages

18 mai 2021, 08:00

php.ini me donne

default_charset utf-8 utf-8


et voilà les infos mysql

interclassement : utf8_general_ci

Merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

18 mai 2021, 09:36

Peut être que tes données sont mal enregistrées dans MySQL, quand tu les regardes avec phpmyadmin, elles apparaissent correctement ?

Tu peux aussi le respécifier au niveau de la connexion à ta bdd, voici par exemple avec Mysqli :
https://www.php.net/manual/fr/mysqli.set-charset.php
Et avec PDO : https://www.php.net/manual/fr/pdo.construct.php#113498
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 108 Messages

18 mai 2021, 10:25

Merci pour ton aide.

J'ai passé en Latin et ça semble fonctionne en tout cas pour les textes.

Donc à l'affichage dans la page; le "é" est correct.
Dans la base, c'est é.

Mais le problème reste le même pour les dates.

Févr. = F?vr.

Et une date, j'ai essayé de changer l'interclasse mais, et je m'en doutais, rien n'y fait.

Merci pour le lien concernant la connexion.

J'ai un code de connexion un peu "tordu" à mes yeux. ;)
$dsn	= 	"mysql:dbname=".SS_DB_NAME.";host=".SS_DB_HOST."";
$pdo	=	"";
try {
	$pdo = new PDO($dsn, SS_DB_USER, SS_DB_PASSWORD);
}catch (PDOException $e) {
	echo "Connection failed: " . $e->getMessage();
}
$db 	=	new Database($pdo);
?>
Je vais tenter
$dsn	= 	"mysql:dbname=".SS_DB_NAME.";host=".SS_DB_HOST."";
$pdo	=	"";
try {
	$pdo = new PDO($dsn, SS_DB_USER, SS_DB_PASSWORD);
}catch (PDOException $e) {
	echo "Connection failed: " . $e->getMessage();
}
$db 	=	new Database($pdo);
?>
J'ai modifié
$dsn	= 	"mysql:dbname=".SS_DB_NAME.";host=".SS_DB_HOST.";charset=UTF8";
Toujours le même souci avec ces dates.

Merci

Bonne journée

Mammouth du PHP | 2703 Messages

18 mai 2021, 12:02

https://www.php.net/manual/fr/function.strftime.php
"If strange characters are returned use utf8_encode(strftime()) for UTF-8 characters"

Eléphant du PHP | 108 Messages

18 mai 2021, 16:01

Un énorme merci or 1.

C'est LA solution.

Génial