<?php header("content-type:text/html; charset=iso-8859-1" ) ; ?>Éventuellement une balise <meta dans les entêtes html peut suffire :
<!doctype html> <html lang="fr"> <head> <meta charset="iso-8859-1"> ....Il ne faut pas oublier que les déclarations header de PHP sont prioritaires sur les balises <meta et qu'en plus, même sans mettre explicitement un header php, le protocole http peut envoyer utf-8 comme charset.
SET NAMES latin1;tout de suite après la connexion à la base de données par votre fonction de connexion mysqli.
//Connexion à Mysqli puis à la base de données function __construct($db_host, $db_username, $db_password, $db_name, $db_prefix, $db_port) { $this->prefix = $db_prefix; $this->link_id = @mysqli_connect($db_host, $db_username, $db_password, $db_name, $db_port); if (!$this->link_id) error('Impossible de se connecter à MySQL et à la base de données. MySQL dit : '.mysqli_connect_error(), __FILE__, __LINE__); // Setup the client-server character set $this->set_names('utf8'); return $this->link_id; } ..... function set_names($names) { return $this->query('SET NAMES \''.$this->escape($names).'\''); }Pour tous les détails et les codes, voir :
mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+-------------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------------+ | character_set_client | cp850 | | character_set_connection | cp850 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | cp850 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | E:\wamp64\bin\mysql\mysql5.7.29\share\charsets\ | +--------------------------+-------------------------------------------------+ 8 rows in set, 1 warning (0.00 sec) mysql>Maintenant, si sous la section [client] du fichier my.ini, on ajoute :
[client] default_character_set=latin1et que l'on redémarre le service wampmysqld64, dans la même console, avec la même requêtes, on aura :
mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+-------------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | E:\wamp64\bin\mysql\mysql5.7.29\share\charsets\ | +--------------------------+-------------------------------------------------+ 8 rows in set, 1 warning (0.00 sec) mysql>On a forcé client, connection et résults a utiliser latin1, ce qui devrait résoudre votre problème.
mysqli_query($link, "SET NAMES 'utf8'" );Attention aux "simple quotes" qui encadrent 'utf8'.
$link = mysqli_connect('127.0.0.1', 'root', '', $base);