Solutions aux chaînes PHP tronquées : 1. Remplacez gb2312 par utf-8 via iconv ; 2. Convertissez l'encodage via la fonction mb_convert_encoding.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Comment résoudre la chaîne php tronquée ? Problèmes avec la conversion de l'encodage des caractères de la fonction PHP iconv()
La bibliothèque de fonctions iconv en PHP peut compléter la conversion entre différents jeux de caractères et constitue une bibliothèque de fonctions de base indispensable dans la programmation PHP, mais parfois iconv ne transcodera pas certaines données ; aucune raison. Par exemple, une erreur se produira lors de la conversion du caractère « - » en gb2312.
Jetons lentement un coup d'œil à l'utilisation de cette fonction.
L'application la plus simple, remplacez gb2312 par utf-8 :
$text=iconv("GB2312","UTF-8",$text);
En cours d'utilisation de $text=iconv("UTF-8","GB2312",$text), si vous rencontrez des caractères spéciaux, tels que : "-", "." et autres caractères dans les noms anglais, la conversion est interrompue. Le texte après ces caractères ne peut pas être converti davantage.
Pour résoudre ce problème, vous pouvez utiliser le code suivant pour y parvenir :
$text=iconv("UTF-8","GBK",$text);
Vous avez bien lu, c'est aussi simple, n'utilisez pas gb2312, écrivez-le simplement comme GBK.
Il existe une autre méthode, le deuxième paramètre, ajoutez //IGNORE, ignorez les erreurs, comme suit :
iconv("UTF-8","GB2312//IGNORE",$data);
Il n'y a pas de comparaison spécifique entre ces deux méthodes, j'estime que la première méthode (GBK au lieu de gb2312) est meilleure.
Description d'Iconv() dans le manuel php :
iconv (PHP 4 >= 4.0.5, PHP 5) iconv – Convert string to requested character encoding Description string iconv ( string in_charset, string out_charset, string str ) Performs a character set conversion on the string str from in_charset to out_charset. Returns the converted string or FALSE on failure. If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.
Lorsque vous utilisez cette fonction pour convertir l'encodage de chaîne, vous devez faire attention au fait que si vous convertissez utf-8 en gb2312, la chaîne peut être tronquée. À ce stade, vous pouvez utiliser la méthode suivante pour le résoudre :
$str=iconv('utf-8',"gb2312//TRANSLIT",file_get_contents($filepath));
C'est-à-dire ajouter la partie rouge dans le deuxième paramètre, ce qui signifie : si aucun caractère correspondant à l'encodage source n'est trouvé dans l'encodage cible, des caractères similaires seront sélectionné pour la conversion. Vous pouvez également utiliser le paramètre //IGNORE ici pour ignorer les caractères qui ne peuvent pas être convertis.
ignore signifie ignorer les erreurs lors de la conversion. Sans le paramètre ignore, toutes les chaînes suivant ce caractère ne peuvent pas être enregistrées.
iconv n'est pas la fonction par défaut de php, et c'est aussi un module installé par défaut. Il doit être installé avant de pouvoir être utilisé.
S'il s'agit de Windows2000+php, vous pouvez modifier le fichier php.ini et supprimer le ";" avant extension=php_iconv.dll. En même temps, vous devez copier le fichier iconv.dll dans votre fichier d'installation php d'origine dans. votre winnt/system32 (si votre dll pointe vers ce répertoire). Dans l'environnement Linux, en utilisant une installation statique, ajoutez simplement un élément supplémentaire --with-iconv lors de la configuration. L'élément iconv est visible dans phpinfo. (Linux7.3+Apache4.06+php4.3.2).
Introduction aux fonctions mb_convert_encoding et iconv
mb_convert_encoding Cette fonction est utilisée pour convertir les encodages. Avant, je ne comprenais pas le concept de codage de programme, mais maintenant il me semble comprendre un peu. Cependant, l'anglais n'a généralement pas de problèmes d'encodage, seules les données chinoises auront ce problème. Par exemple, lorsque vous utilisez Zend Studio ou Editplus pour écrire un programme, vous utilisez le codage gbk. Si les données doivent être saisies dans la base de données et que le codage de la base de données est utf8, alors les données doivent être codées et converties, sinon elles le seront. devenir tronqué lors de l'entrée dans la base de données.
Créez un GBK vers UTF-8 :
<?php header("content-Type: text/html; charset=Utf-8"); echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK"); ?>
Créons un GB2312 vers Big5 :
<?php header("content-Type: text/html; charset=big5"); echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); ?>
Mais pour utiliser la fonction ci-dessus, vous devez l'installer mais vous devez d'abord activer la bibliothèque d'extension mbstring.
string mb_convert_encoding (string str, string to_encoding [, Mixed from_encoding]) Vous devez d'abord activer la bibliothèque d'extension mbstring, ajoutez : extension=php_mbstring.dll ; et il sera basé sur Le contenu est automatiquement reconnu, mais l'efficacité d'exécution est bien pire que celle de iconv ;
string iconv (string in_charset, string out_charset, string str) Remarque : en plus de spécifier l'encodage vers lequel convertir, le Le deuxième paramètre peut également ajouter deux suffixes ://TRANSLIT et //IGNORE, où //TRANSLIT convertira automatiquement les caractères qui ne peuvent pas être directement convertis en un ou plusieurs caractères approximatifs, //IGNORE ignorera les caractères qui ne peuvent pas être convertis, et la valeur par défaut L'effet est de commencer à partir de la première troncature de caractère illégale.
Utilisez généralement iconv. Utilisez uniquement la fonction mb_convert_encoding lorsque vous ne parvenez pas à déterminer quel est l'encodage d'origine, ou lorsque iconv ne peut pas être affiché normalement après la conversion.
$content = iconv("GBK", "UTF-8″, $content); $content = mb_convert_encoding($content, "UTF-8″, "
Apprentissage 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!