Maison >développement back-end >Problème PHP >Comment résoudre le problème des caractères chinois tronqués en php

Comment résoudre le problème des caractères chinois tronqués en php

藏色散人
藏色散人original
2020-07-11 09:11:043270parcourir

Solution aux caractères chinois tronqués en PHP : 1. Changez le fichier de configuration mysql "my.ini" ou "my.cnf" ; 2. Ajoutez l'instruction "mysql_query("set" avant le programme PHP qui en a besoin. pour effectuer des opérations de base de données sur les noms 'encoding'");"; 3. Définissez le codage du serveur sur "UTF-8".

Comment résoudre le problème des caractères chinois tronqués en php

Analyse des causes et solutions pour les caractères PHP chinois tronqués

Encodage des pages Web PHP

1. Si vous souhaitez utiliser l'encodage gb2312, alors PHP doit afficher l'en-tête : header("Content-type:text/html;charset=gb2312");, ajouter une page statique, le format d'encodage de tous les fichiers est ANSI, vous pouvez l'ouvrir avec le Bloc-notes et l'enregistrer en tant que sélection Encodé en ANSI, en écrasant le fichier source.

2. Si vous souhaitez utiliser l'encodage utf-8, alors php doit afficher l'en-tête : header("Content-type:text/html;charset=utf-8");, ajouter une page statique et encoder tous les fichiers Le format est utf-8. L'enregistrement au format utf-8 peut être un peu gênant. Généralement, les fichiers utf-8 auront une nomenclature au début. Si vous utilisez une session, il y aura des problèmes. Vous pouvez utiliser editplus pour enregistrer. Sélection des paramètres->Fichier-> Signature UTF-8, sélectionnez Toujours supprimer, puis enregistrez pour supprimer les informations de nomenclature.

3.php lui-même n'est pas Unicode. Toutes les fonctions telles que substr doivent être modifiées en mb_substr (l'extension mbstring doit être installée ou iconv peut être utilisée pour transcoder) ;

Interaction des données entre PHP et Mysql

Le codage de PHP et de la base de données doit être cohérent

1 Modifiez le fichier de configuration mysql my.ini ou my.cnf, mysql l'est. il est préférable d'utiliser utf -8 Encoding

[mysql]  
default-character-set=utf8 
[mysqld]  
default-character-set=utf8 
default-storage-engine=MyISAM 
在[mysqld]下加入:  
default-collation=utf8_bin 
init_connect='SET NAMES utf8'

2. Ajoutez mysql_query("set names 'encoding'"); avant le programme PHP qui doit effectuer les opérations de base de données. Le codage PHP est gb2312, alors le codage mysql est gb2312, s'il s'agit de utf-8, alors le codage mysql est utf8, de sorte qu'il n'y aura pas de caractères chinois PHP tronqués lors de l'insertion ou de la récupération de données.

À propos du codage

1. Jeu de caractères :

Les données stockées au bas de l'ordinateur sont toutes des données binaires. Si vous souhaitez obtenir des caractères vraiment significatifs, vous devez. laissez le binaire Les données correspondent à chaque caractère, et cette correspondance forme une table de codage.

Jeux de caractères couramment utilisés :

Tableau de codes latins ISO-8859-1, qui représente les langues d'Europe occidentale et utilise un octet ou 8 bits pour représenter les données.

GB2312 Table de codes chinois simplifiée. Contient 6 000 à 7 000 caractères et symboles chinois. Représenté par deux octets. Les deux octets commencent par 1 et sont tous deux des nombres négatifs.

GBK est actuellement la table de codes chinois la plus utilisée, avec 20 000 caractères et symboles chinois. Utilisez deux octets pour représenter les données.

Le code standard international Unicode, quel que soit le texte, est stocké sur deux octets.

UTF-8 est basé sur Unicode. Les données peuvent être stockées dans un octet au lieu de deux octets. De plus, cette table de codes est plus standardisée et les informations de codage sont ajoutées à chaque en-tête d'octet.

(Linux utilise ISO-8859-1 par défaut, win32 utilise GB2312 par défaut)

2. Encodage et décodage

Encodage : convertissez les caractères en caractères correspondants dans le caractère. set Encoding

Décodage : trouver le caractère correspondant à l'encodage dans le jeu de caractères

Processus de transmission du chinois dans le réseau

1 En prenant Java comme exemple, Eclipse utilise. UTF- par défaut 8 jeux de codage, le serveur Tomcat utilise le jeu de codage ISO-8859-1 par défaut et les navigateurs utilisent généralement le jeu de codage GBK par défaut.

Les caractères sont transmis entre le programme et le serveur, et les octets sont transmis entre le serveur et le navigateur.

2. Processus de transmission chinois :

Caractères chinois dans le navigateur -----> encoder -----> ----->Programme;

Caractères chinois dans le programme----->Serveur----->Décodage----->Navigateur---- ->Encodage pour display

3. Raisons des caractères tronqués et solutions :

(1). Les caractères chinois dans le navigateur sont codés en GBK et transmis au serveur dans des flux d'octets. ISO-8859-1 et le transmet au programme sous forme de caractères.

Étant donné que le jeu d'encodage ISO-8859-1 ne prend pas en charge les caractères chinois, tous les caractères décodés sont des caractères d'Europe occidentale. La transmission de ces caractères au programme produira des caractères tronqués

Pour cette raison, Définissez simplement l'encodage du serveur sur UTF-8 :

request.setCharacterEncoding("UTF-8");

Mais cette méthode ne peut être utilisée que pour la méthode de requête POST, car le paramètre n'affectera que le contenu du corps de la requête, s'il s'agit de la méthode de requête GET, vous pouvez d'abord utiliser la méthode de décodage puis d'encodage :

byte[] buffer = request.getParameter("word").getBytes("ISO-8859-1");  //进行编码
String newStr = new String(buffer,"UTF-8");  //进行解码

(2). Les caractères chinois du programme sont transmis tels quels au serveur. Le serveur doit d'abord encoder les caractères chinois puis les transmettre. au navigateur, mais à cause de l'ISO-8859-1, le jeu de codage ne prend pas en charge les caractères chinois, donc le codage correspondant ne peut pas être trouvé dans le jeu de caractères. Après le codage, il devient un point d'interrogation, qui est transmis au navigateur et affiché. ;

Dans ce cas, cela doit être fait deux fois Paramètres :

response.setCharacterEncoding("UTF-8");//将服务器编码集设置为UTF-8
response.setContentType("text/html;charset=UTF-8"); //将浏览器编码集设置为UTF-8

En fait, la deuxième ligne de paramètres inclut déjà les paramètres du serveur, il vous suffit donc généralement d'écrire le deuxième phrase du code.

Pour plus de connaissances connexes, veuillez visiter le Site Web PHP chinois !

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