Quelle version de PHP ?
Depuis PHP 7.1.0, PHP utilisant l'API Unicode de Windows au lieu d'ANSI, les renvoie en UTF-8 (par défaut, c'est éventuellement "configurable" ).
Antérieur, utilisant l'API ANSI, tous les noms de fichier renvoyés (et à utiliser) sont et doivent être encodés en ANSI (CP1252 pour nous).
Du coup :
- pour PHP >= 7.1.0, rien à faire normalement, rien à convertir (= supprimer utf8_encode) mais ta connexion doit être en UTF-8 (charset=utf8 dans le DSN)
- pour PHP < 7.1.0, deux solutions :
1. sois tu convertis toi-même les noms de CP1252 à UTF-8 avec iconv (à préférer à utf8_encode qui effectue une conversion ISO-8859-1 => UTF-8 qui te ferait perdre des caractères comme € ou oe) pour une connexion PDO/MySQL en utf8 (charset=utf8 dans le DSN)
2. tu ne convertis rien, c'est-à-dire que tu restes en CP1252 en mettant ta connexion PDO/MySQL dans le même jeu (charset=latin1 dans le DSN)
Quoi qu'il arrive, au SELECT, tu ne devrais rien avoir à faire (mis à part préciser le jeu de caractères de la connexion, chose qui devrait être déjà faite).
Il serait bon aussi d'ajouter un échappement de $r (qui sort de nulle part - $e ?) voire carrément mieux, d'opter pour une requête préparée.
PS : si ton code n'est pas en PDO, il faut faire l'équivalent de ce paramètre charset (mysqli_set_charset, ou son équivalent OO - pour mysqli)
PPS : il vaudrait mieux éviter MyISAM (pas de clés étrangères, ça peut crasher, etc)
Message édité par pluj le 26-10-2017 à 17:21:14