La solution aux caractères chinois tronqués dans php iconv : téléchargez d'abord la bibliothèque de fonctions libiconv et installez libiconv ; puis recompilez php ; enfin ajoutez le paramètre "//IGNORE" après l'encodage qui doit être converti.
Recommandé : "Tutoriel vidéo PHP"
Comment utiliser la fonction iconv en php pour résoudre Caractères chinois tronqués
La bibliothèque de fonctions iconv peut effectuer la conversion entre différents jeux de caractères et constitue une bibliothèque de fonctions de base indispensable dans la programmation PHP.
1. Téléchargez la bibliothèque de fonctions libiconv libiconv-1.x.tar.gz
2. Décompressez tar -zxvf libiconv-1.x.tar.gz; >3. Installez libiconv
#configure --prefix=/usr/local/iconv #make #make install
4. Recompilez php et ajoutez les paramètres de compilation --with-iconv=/usr/local/iconv
sous WindowsLa fonction iconv convertit la page codée en utf-8 capturée en gb2312. Uniquement en utilisant la fonction iconv pour transcoder les données capturées, les données seront moindres sans raison.
Il s'agit d'un bug dans la fonction iconv. iconv fera une erreur lors de la conversion du caractère "-" en gb2312. La solution est très simple, c'est-à-dire ajouter "//IGNORE" après l'encodage qui doit être converti, qui est le deuxième paramètre de la fonction iconv As. suit :
Voici le contenu cité :
iconv("UTF-8","GB2312//IGNORE",$data)
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 sous votre original. php dans votre sous winnt/system32 (si votre dll pointe vers ce répertoire)
Dans l'environnement Linux
, utilisez l'installation statique et ajoutez un élément supplémentaire --with- lors de la configuration de iconv C'est suffisant, phpinfo peut voir les éléments iconv. Un exemple simple d'utilisation :
$zip = new ZipArchive();//打开文件 如果文件已经存在则覆盖,如果没有则创建 if($zip->open($destination,$overwrite?ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE)!==true){ return false; } //向压缩文件add the files foreach($valid_files as $file){ //$zip->addFile($file,$file); $file_info_arr= pathinfo($file); $filename =$file_info_arr['basename']; $filesss = iconv('UTF-8', 'GBK//IGNORE', $filename); $zip->addFile($file,$filesss); }
Introduction aux fonctions mb_convert_encoding et iconv en PHP
La fonction mb_convert_encoding permet de convertir des 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.
Voir l'utilisation officielle de mb_convert_encoding :
http://cn.php.net/manual/zh/function.mb-convert-encoding.php
Mais vous devez utiliser La fonction ci-dessus doit être installée mais la bibliothèque d'extension mbstring doit d'abord être activée.
Une autre fonction iconv en PHP est également utilisée pour convertir l'encodage de chaîne, et sa fonction est similaire à la fonction ci-dessus.
Il y a quelques exemples détaillés ci-dessous :
iconv — Convertir la chaîne en codage de caractères demandé
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — Convertir l'encodage des caractères
(PHP 4 >= 4.0.6, PHP 5)
Utilisation :
string mb_convert_encoding ( string str, string to_encoding [ , Mixed from_encoding] )
Vous devez d'abord activer la bibliothèque d'extension mbstring. Dans php.ini, supprimez ; extension=php_mbstring.dll devant ;
mb_convert_encoding peut spécifier plusieurs encodages d'entrée, et il S'identifie automatiquement en fonction du contenu, mais l'efficacité d'exécution est bien pire que iconv ;
string iconv (string in_charset, string out_charset, string str)
Remarque : le deuxième paramètre, en plus de spécifier la conversion En plus de l'encodage, vous pouvez également ajouter deux suffixes : //TRANSLIT et //IGNORE. //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 directement. ne peut pas être converti en caractères, et l'effet par défaut est de tronquer à partir du premier caractère illégal.
Renvoie la chaîne convertie ou FALSE en cas d'échec.
Utilisation : on constate qu'iconv fera une erreur lors de la conversion du caractère "-" en gb2312 S'il n'y a pas de paramètre ignorer, tout. les chaînes suivant ce caractère seront Impossible à enregistrer. Quoi qu'il en soit, ce "-" ne peut pas être converti avec succès et ne peut pas être affiché. De plus, mb_convert_encoding n'a pas ce bug.
En général, iconv est utilisé. La fonction mb_convert_encoding n'est utilisée que lorsque l'encodage d'origine ne peut pas être déterminé ou que la conversion iconv ne peut pas être affichée normalement.
Petits pièges dans l'utilisation de mb_convert_encoding pour transcoder en PHP :
Tout le monde connaît l'utilisation de la méthode mb_convert_encoding() pour convertir les encodages de caractères dans les programmes PHP, et elle est également utilisée en grande quantité. Et en général, cette méthode fonctionne assez bien et mérite des éloges. Mais dans un projet, nous devions l'utiliser pour convertir UTF8 en GBK et avons trouvé un problème mineur lors de la conversion de certains caractères spéciaux. La performance spécifique est que mb convertit les caractères qui peuvent être codés en utf8 mais ne peuvent pas être codés en gbk.
Dans notre esprit, pendant le processus de conversion de l'encodage de caractères, si nous rencontrons des caractères qui ne peuvent pas être représentés par l'encodage cible, le programme de transcodage devrait supprimer ces caractères. De cette manière, même si certaines données sont perdues, il le fera. not La séquence de caractères qui a provoqué le transcodage n'est pas disponible. On ne sait pas pourquoi mb devrait utiliser la méthode ci-dessus au lieu de la supprimer.
La solution temporaire consiste à filtrer la séquence de chaînes transcodée pour filtrer tous les caractères x0080 ; ou à filtrer la chaîne utf8 avant de s'échapper pour filtrer le représentable ut8 mais gbk pour tous les caractères qui ne peuvent pas être représentés, en termes de Difficulté de mise en œuvre, la première méthode de filtrage est relativement simple à mettre en œuvre.
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!