Maison  >  Article  >  développement back-end  >  Problème de conversion d'encodage entre json et PHP

Problème de conversion d'encodage entre json et PHP

不言
不言original
2018-04-23 11:41:241335parcourir

Cet article présente principalement le problème de conversion d'encodage entre json et PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

<br/>
<br/>


※ Prémisse : Gestion des situations de conversion de données pouvant survenir lorsque json et php se transfèrent des données respectivement en front et en backend (principalement pour les tableaux) :


☆ Code de la réception :

var arr = {"name":"张伟","age":19}; //此时生成的是json的数组
arr = json.stringify(arr); //此时将arr转换成 json的字符串类型
$.ajax({
               type:"post",
                url:url,
                data:{arr:arr}, //将转换成字符串类型的json传递给php后台,换换成字符串类型后可以一次性传递多个数据
                success:function(res){
                   
   
                    console.log(res);
                    
                }
            });


☆Code backend (lorsque vous ne passez que des chaînes) :

map = $_POST[&#39;arr&#39;];
            
 $map = json_decode($map);//json对象 解码之后PHP可以使用,但要用json的方法在后台使用$map->name 
 echo $map->name; // 会输出到res中, 通过consolve.log(res) 可以直接输出



Question


Concernant le cas de passage de tableaux entre php et json, il existe deux manières de transférer des données de l'arrière-plan vers le devant : echo, ajaxreturn


$1 La première méthode :

echo, vous devez l'encoder vous-même puis sortir la chaîne json


À l'heure actuelle, il y a deux situations, l'une consiste à renvoyer la chaîne json reçue de la réception, et l'autre consiste à créer un nouveau tableau en arrière-plan et à le renvoyer à la réception.


$1.1 L'arrière-plan reçoit les données de premier plan et renvoie les mêmes données

$map = $_POST[&#39;arr&#39;];//从前台传递过来的$map
$map = json_decode($map);//json对象 解码之后给php后台使用
.....
$map = json_encode($map);//对json数组进行编码生成json字符串
echo $map; //输出$map到前台
$1.2 L'arrière-plan crée le programme et renvoie au premier plan

$mapN = json_encode($mapN);//在后台自行创建的数组,在传递给前台之前同样需要进行编码
echo $mapN;
$1.3 Opération au premier plan

res = eval("("+res+")");//通过res将从后台传过来的json字符串转换成数组
console.log(res.name);


$2 Deuxième méthode :

ajaxreturn , pass Les tableaux n'ont pas besoin d'être codés. Par défaut, la forme chaîne de json est transmise, mais eval est requis pour la conversion dans le frontend. Convertissez la chaîne json en tableau


.


À l'heure actuelle, il y a deux situations, l'une consiste à renvoyer la chaîne json reçue de la réception, et l'autre consiste à créer un nouveau tableau en arrière-plan et retournez à la réception.


$2.1 Recevoir le programme du premier plan et le renvoyer directement de l'arrière-plan au premier plan

$map = $_POST[&#39;arr&#39;];
$map = json_decode($map);//json对象 解码之后
$this->ajaxReturn($map,&#39;json&#39;);


$2.2 Créer le programme dans le arrière-plan et retour au premier plan


$mapN = array("name"=>"zhangwei");
$this->ajaxReturn($mapN,&#39;json&#39;);// 此时不需要json_encode() ,前台通过mapN.name 或者mapN[&#39;name&#39;]输出
2,3 $ Opération à la réception

res = eval("("+res+")");//通过res将从后台传过来的json字符串转换成数组
console.log(res.name);



Supplément de 3 $ :

La différence entre echo et ajaxreturn concernant le transfert de données de l'arrière-plan au premier plan :

echo n'encodera pas le tableau php dans un format de transfert json - json string type

ajaxreturn La fonction json_encode sera automatiquement appelée pour l'encodage


La même chose entre les deux :

Après avoir passé le json valeur à la réception, eval ("("+res+ ")") pour le convertir en tableau json, vous pouvez utiliser




$4 Remarque :

Ici, l'arrière-plan peut renvoyer des données au succès du front-end : fonction (res) via echo ou ajaxreturn


Mais les données après le retour Différentes méthodes d'utilisation :

1. Type de chaîne : via

echo en arrière-plan, vous pouvez directement sortir la chaîne à la résolution de la réception,


2. Type de tableau : qu'il s'agisse du type de tableau de type chaîne de json transmis par la réception ou du type de tableau généré dans en arrière-plan, la méthode renvoyée à la réception via ajaxreturn peut être transmise :

Nom du tableau ['keyname'] Ou appelez



en utilisant

array name.keyname

Conseils :

1. Passez la chaîne json à l'arrière de la réception (elle-même est un tableau, mais elle est convertie en chaîne json via

stringify à la réception). En arrière-plan, json_decode est nécessaire pour le décodage, et il peut être utilisé une fois converti en tableau json, en appelant la méthode tableau. name->key

2. Si le tableau créé en arrière-plan est converti en chaîne json via json_encode, une fois les données transmises à la réception, elles doivent être transmises via

res = eval("("+res+")"); Convertir en tableau json, méthode d'appel frontal : nom du tableau['keyname'] ou Array name.keyname

Recommandations associées :

Conversion d'encodage de caractères php

Comment résoudre les caractères tronqués en php conversion d'encodage


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