PHP7 + MySql/MariaDB souci d'unicode [Résolu]

NHenry 14057 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 14 février 2018 Dernière intervention - 13 sept. 2017 à 22:57 - Dernière réponse : freebike 97 Messages postés jeudi 2 juillet 2009Date d'inscription 22 septembre 2017 Dernière intervention
- 22 sept. 2017 à 21:53
Bonsoir,

Je bute sur un problème qui je pense a une réponse simple.

J'ai récemment installé un serveur utilisant Apache+PHP7+MySql/MariaDB.
De la configuration, tout est configuré en UTF8.

Mais lors des écritures en BDD, certains caractères sont remplacés par des "?"
Chaines qui fonctionne :
- ほかんこ。
- 。サンタダッシィ。2014年12月頃のイラストのようです
- Поняшьи Перья

Donc cela suppose que l'UTF-8 est bien géré, mais le caractère :
Comme le caractère ne passe pas, voici le lien du RSS qui me sert de source (sur un autre serveur en PHP5) : https://www.canterlotcomics.com/rss (le livre en début de titre)
et pareil sur celui ci : https://www.canterlotcomics.com/news/rss (le journal en début de titre)

est remplacé par 1 ou 4 ?
Par le script PHP, il est remplacé par ????
Par PhpMyAdmin il est remplacé par ?

Est-ce une limitation connue ou un pb de config ?
Comme il ne passe pas sur le forum, je suppose que c'est une limitation.

Je n'ai rien trouvé de probant, mais je pense que j'ai déjà un bout de ma réponse.

Complément après quelques tests, les colonnes sont de base en utf8_general_ci.
J'ai aussi essayé utf8mb4_unicode_ci, dans ce cas, quand je fais tout via PhpMyAdmin, le caractère s'affiche bien, mais via PHP, l'ajout mets ???? et la lecture (après écriture via PHPMyAdmin) me remonte un ?.
Je m'oriente maintenant vers un souci avec PHP.

Connexion à la BDD
global $mysqli;
$mysqli = new mysqli($host, $user,$passwd, $bdd);

if ($mysqli->connect_errno) {
    printf("Echec de la connexion: %s\n", $mysqli->connect_error);
    exit();
}

if(!$mysqli->set_charset("utf8"))
	echo "Unicode problem";


Les écritures se font par forgeage de requêtes SQL directes et l'affichage (utilisateur) via Twig (qui ne me pose pas de soucis en PHP5 sur l'autre serveur).
Je vais continuer sur cette piste pour poursuivre mes recherches.

Merci d'avance
Afficher la suite 

20 réponses

Répondre au sujet
NHenry 14057 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 14 février 2018 Dernière intervention - 14 sept. 2017 à 20:45
+2
Utile
Bon, après quelques heures de recherche, j'ai enfin la solution.

Si vous rencontrez ce problème de caractères unicode / emoji qui apparaissent sous forme de point d’interrogation : ? ou ????

Il faut passer l'encodage de la colonne concernée (et les autres tant qu'à faire) de Utf8_* à Utf8mb4_*

Ensuite lors de la connexion à la base de données MySql avec PHP, il faut préciser l'encodage associé :
$mysqli->set_charset("utf8mb4")

Avec ces quelques modifications mineures mais pas évidentes à deviner, le problème est résolu (au moins chez moi).
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NHenry
freebike 97 Messages postés jeudi 2 juillet 2009Date d'inscription 22 septembre 2017 Dernière intervention - 18 sept. 2017 à 09:10
0
Utile
18
Bonjour NHenry
J'ai aussi le même problème sur un phpbb : http://www.freebiker.net/php/phpBB2/index.php (en bas de page)
ok pour passer en Utf8mb4 mais comment se passe la deuxieme étape dans phpmyadmin?
Merci
Pascal
freebike 97 Messages postés jeudi 2 juillet 2009Date d'inscription 22 septembre 2017 Dernière intervention - 21 sept. 2017 à 21:35
Mais le problème se situe au niveau des entrées de la BDD non?
NHenry 14057 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 14 février 2018 Dernière intervention > freebike 97 Messages postés jeudi 2 juillet 2009Date d'inscription 22 septembre 2017 Dernière intervention - 21 sept. 2017 à 21:39
Pas seulement, il peut se trouver au niveau de la BDD, mais aussi à ton code PHP qui envoie dans le mauvais encodage.
freebike 97 Messages postés jeudi 2 juillet 2009Date d'inscription 22 septembre 2017 Dernière intervention > NHenry 14057 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 14 février 2018 Dernière intervention - 21 sept. 2017 à 22:36
Aujourd'hui tout fonctionne bien, c'est les anciennes entrées que j'aimerais modifier...
NHenry 14057 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 14 février 2018 Dernière intervention > freebike 97 Messages postés jeudi 2 juillet 2009Date d'inscription 22 septembre 2017 Dernière intervention - 22 sept. 2017 à 18:53
Tu peux les modifier à la main si elles ne sont pas trop nombreuses ou sinon, faire un bout de code pour faire la conversion.
freebike 97 Messages postés jeudi 2 juillet 2009Date d'inscription 22 septembre 2017 Dernière intervention - 22 sept. 2017 à 21:53
je suis allé voir dans les tables anciennes au niveau des entrées qui posent problème mais les é sont bien affichés. Que puis je modifier d'autre?
Commenter la réponse de freebike

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.