Maison > développement back-end > Problème PHP > Comment résoudre les chaînes php tronquées

Comment résoudre les chaînes php tronquées

藏色散人
Libérer: 2023-03-13 16:18:01
original
5231 Les gens l'ont consulté

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.

Comment résoudre les chaînes php tronquées

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);
Copier après la connexion

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);
Copier après la connexion

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);
Copier après la connexion

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.
Copier après la connexion

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));
Copier après la connexion

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"); 
?>
Copier après la connexion

Créons un GB2312 vers Big5 :

<?php 
header("content-Type: text/html; charset=big5"); 
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); 
?>
Copier après la connexion

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″, "
Copier après la connexion

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!

Étiquettes associées:
Déclaration de ce site Web
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
Derniers numéros
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal