Exemple de conversion d'encodage de tableau PHP

怪我咯
Libérer: 2023-03-13 15:50:01
original
1820 Les gens l'ont consulté

En programmation PHP, les opérations sur les tableaux rencontrent parfois des problèmes liés à la conversion de l'encodage.

En raison de l'effet d'affichage de certains caractères spéciaux, j'ai changé utf-8 en GBK. En raison de l'utilisation de la technologie ajax, cela implique également un vieux problème : la conversion de l'encodage.

Certaines validation de formulaire doivent renvoyer des données json. La fonction json_encode de PHP ne prend en charge que l'encodage utf-8, je n'ai donc pas d'autre choix que d'iconv. L'effet souhaité est de convertir le tableau GBK en. un tableau utf-8 à la fonction json_encode.

Voici comment cela a été fait initialement. Après avoir sérialisé le tableau, utilisez la fonction iconv pour convertir l'encodage, puis désérialisez-le :

Le code est le suivant :

unserialize(iconv('gbk','utf-8',serialize($array)));
Copier après la connexion

Le résultat obtenu était vide, mais ensuite je me suis souvenu que l'encodage par défaut ini_set('default_charset', 'gbk'); avait été défini dans le fichier de configuration  ; gbk pour désérialiser les chaînes utf-8, ici Il devrait également être possible d'ajouter ini_set('default_charset', 'utf-8'); entre la sérialisation et la désérialisation, mais cela semble toujours un peu gênant car il s'agit d'un encodage global paramètre, ce qui peut facilement entraîner des erreurs à d'autres endroits, tels que des opérations de base de données. Changez ensuite d'idée, utilisez la méthode de sérialisation pour construire le prototype du tableau et utilisez la fonction var_export. La fonction finale est la suivante :

Le code est le suivant :

function array_iconv($in_charset,$out_charset,$arr){  
        return eval('return '.iconv($in_charset,$out_charset,var_export($arr,true).';'));  
}
Copier après la connexion

Le le principe est très simple var_export définit le deuxième paramètre sur true , renvoie la chaîne prototype du tableau, convertit la chaîne en codage utf-8, puis utilise eval pour effectuer le retour (similaire à fonction anonyme ?), ce qui résout parfaitement le problème.

Suivi : Plus tard, j'ai cherché des informations sur Internet pour voir s'il existe une meilleure méthode. Tout ce que j'ai trouvé est similaire. Ils utilisent tous l'appel récursif iconv s'il y a trop d'éléments de tableau ou plus. dimensions, les performances seront réduites. Ce n'est certainement pas si bon. Ce qui est mieux, c'est la méthode du code natif. Vous n'avez pas besoin de vous demander s'il s'agit d'un tableau à N dimensions ou d'un tableau associatif. pour garantir la cohérence des données avant et après la conversion du tableau. À en juger par la longueur du code et la comparaison entre les boucles et les méthodes natives, je pense que tout le monde a déjà le choix.

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:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!