encodage texte sur requete mysql

WRInaute discret
Bonjour,

Ets-il possible de placer un utf8_encode à la sortie d'une requête mysql, du genre :
$request=mysqli_query($conn,"select * from Articles")
while($ligne = utf8_encode(mysqli_fetch_object($request)))

ceci pour éviter d'avoir à placer utf8_encode sur chaque echo de récupération des données de la base ?

Si c'est pas possible, existe-t-il d'autres solutions ?

Merci d'avance.
 
WRInaute passionné
Bah moi j'ai passé toutes mes bases MySQL en utf8... (utf8mb4_unicode_ci), je pense que c'est une bonne pratique...
 
WRInaute accro
Heu je me relis, je me suis trompé avec le array_map, il fait faire un array_walk_recursive vu que c'est un tableau associatif:

PHP:
function array_utf8_encode($arr)
{
    array_walk_recursive($arr, function (&$val) {
        $val = utf8_encode($val);
    });

    return $arr;
}

Mais comme le souligne @rick38 c'est mieux d'avoir directement sa DB en UTF8.
 
Dernière édition:
WRInaute discret
Merci pour vos réponses. A propos des BDD justement, qu'est-ce qu'il faut passer en utf-8 : le serveur mysql ? la base de données ? chaque table de la base ? les interclassements ?
 
WRInaute passionné
L'interclassement de chaque champ textuel de chaque table.
En changeant celui d'une table avec phpMyAdmin, il y a une option "Collation" et dessous "Change all column collations" pour ne pas avoir à le faire manuellement pour chaque champ. Il faut le faire pour toutes les tables.
 
WRInaute discret
Le truc c'est est-ce que ça fonctionne pour les textes qui sont déjà dans la bdd depuis des années ...
 
WRInaute discret
De toute façon, ça ne fonctionne pas, quelque soit l'encodage de la BDD, les é et autres caractères ne s'affichent pas si je ne fais pas un utf8_encode ...
 
WRInaute accro
Oui mais l'encodage il faut vérifier que tout concorde :
- HTML meta charset
- DB collation
- DB "SET NAMES utf8"
- Fichiers PHP en UTF8
- etc...

Le mieux est vraiment de décider de franchir le pas et passer en UTF8
 
WRInaute discret
Sinon spout, peux-tu me donner un exemple plus précis d'utilisation de ta fonction :
function array_utf8_encode($arr)
{
array_walk_recursive($arr, function (&$val) {
$val = utf8_encode($val);
});
return $arr;
}
avec la requète qui m'intéresse :
$request=mysqli_query($conn,"select * from Articles")

Je vois pas comment l'appliquer ...
 
WRInaute accro
Je n'ai pas d'exemple plus précis, il faut tester en live et ça doit faire 15 ans que j'ai pas utilisé mysql*_***.
 
Discussions similaires
Haut