Maison  >  Article  >  développement back-end  >  Comment résoudre le problème d'erreur php emoji mysql

Comment résoudre le problème d'erreur php emoji mysql

藏色散人
藏色散人original
2021-09-01 09:03:022403parcourir

L'erreur php emoji mysql est due au fait que la base de données ne prend pas en charge les émoticônes. La solution est la suivante : 1. Changez le jeu de caractères en utfmb4 ; 2. Échapper à l'expression emoji et reconvertissez-la lors de l'appel.

Comment résoudre le problème d'erreur php emoji mysql

L'environnement d'exploitation de cet article : système Windows 7, version PHP7.1, ordinateur Dell G3

Comment résoudre le problème d'erreur php emoji mysql ?

C'est utile pour les utilisateurs lors de la création de petits programmes Des informations telles que le nom WeChat sont stockées dans la base de données comme référence pour les dossiers de pratique, mais il s'avère que lorsque le nom WeChat contient des expressions emoji, l'expression ne peut pas être stockée dans le champ de la base de données. Lorsque j'utilisais la base de données Access auparavant, les émoticônes pouvaient être directement stockées dans les champs.

Dépannage des causes :

Tout d'abord : j'ai testé si cela était dû au programme PHP. J'ai utilisé la publication pour soumettre du contenu avec des expressions emoji. Le contenu soumis était normal et le contenu de la publication contenait des expressions emoji.

Comment résoudre le problème derreur php emoji mysql

Ensuite : essayez d'insérer ces données dans la base de données. Après une insertion réussie dans la base de données, j'ai constaté que l'expression était devenue un symbole ?

Comment résoudre le problème derreur php emoji mysql

Le problème est fondamentalement compris à ce stade, c'est-à-dire que ma base de données ne prend pas en charge cette expression.

Attention ! Avis! Remarque : Ceci est le résultat de son exécution à l'aide de l'outil sql-front, mais son exécution dans un programme PHP peut empêcher tout le contenu derrière l'expression emoji d'être enregistré normalement. Par exemple :

[Titre "Emoji"]Le symbole emoji est au début du contenu, et le contenu inséré est directement vide,

[Le titre "Emoji" précédent]Le contenu inséré est [Devant],

expressions emoji et tout le contenu après les expressions emoji Impossible d'insérer normalement.

Solution :

Méthode 1 : J'ai vérifié sur Internet et j'ai dit qu'il s'agissait de modifier l'encodage du jeu de caractères de la base de données. Essayez de changer le jeu de caractères en utfmb4. Insérez une autre donnée et voyez que l'expression est bien stockée dans la base de données.

Comment résoudre le problème derreur php emoji mysql

Il est à noter que même si le jeu de caractères de la base de données est modifié, le programme PHP doit modifier le jeu de caractères en conséquence. Sinon c'est toujours ???.

La méthode de définition est : mysqli_query($conn,"SET NAMES UTF8MB4");

Comment résoudre le problème derreur php emoji mysql

Méthode 2 : Échapper à l'expression emoji et la reconvertir lors de l'appel. Il ne s'agit que de définir deux fonctions, une pour l'évasion et une pour l'anti-évasion. //emoji escape

function en_emoji($str){
$en_str='';
$length=mb_strlen($str,'utf-8');
for($i=0;$i=4){
$en_str.=''.rawurlencode($tmp_str).'';
}else{
$en_str.=$tmp_str;
}
}
return $en_str;
}
//反转义为emoji
function de_emoji($str){
$de_str=preg_replace_callback('|(.*?)|',function($matches){
return rawurldecode($matches[1]);
},$str);
return $de_str;
}

La méthode d'utilisation est également très simple. Échapper aux données lors de leur enregistrement dans la base de données, puis inverser l'échappement lors de leur lecture et de leur affichage. Le résultat après

en_emoji($str) est :

Comment résoudre le problème derreur php emoji mysql

Utilisez de_emoji($str) lors de la lecture et de l'affichage, et c'est tout.

Comparaison de deux solutions :

Méthode 1 : Modifier le jeu de caractères, non seulement la base de données, mais aussi le code du programme. Mais que puis-je dire ? Peut-être que la base de données sera mise à niveau vers utf8mb4 à l'avenir.

Méthode 2 : En utilisant la méthode fonction, il vous suffit de modifier le programme et vous n'avez pas besoin de toucher à la base de données. Deux fonctions sont mises en œuvre. Mais comparé au contenu de la base de données, cela ressemble à des caractères tronqués. Et quand j'écrivais cet article, j'ai découvert que parce que en_emoji était utilisé lors du stockage des données, toutes les expressions devenaient des codes d'échappement. Lorsque j'utilisais l'anti-escape de_emoji lors de l'affichage du contenu de l'article, cette fois, j'ai découvert que le contenu d'échappement que j'avais à l'origine. que je voulais exprimer dans mon article avait également été évadé. Vous pouvez voir que je ne peux utiliser qu'une image pour remplacer les performances de mes résultats ci-dessus.

Conclusion : utilisez moins d’émojis. C'est gênant de toute façon. Bien sûr, si vous créez la base de données vous-même et écrivez le programme vous-même, il est plus parfait de configurer utf8mb4 en utilisant la première méthode. Mais pour être honnête, je n'ai utilisé la fonction d'échappement que lors de la rédaction de cet article et je l'ai désactivée après l'écriture pour éviter des problèmes inutiles.

Recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn