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

不言
Libérer: 2023-03-24 17:16:01
original
1334 Les gens l'ont consulté

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

<🎜. > <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) :

<br/>

☆ Code de la réception :

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

<br/>

☆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) 可以直接输出
Copier après la connexion

<br/>

<br/>

Question

<br/>

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

<br/>

$1 La première méthode :

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

<br/>

À 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.

<br/>

$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到前台
Copier après la connexion
$1.2 L'arrière-plan crée le programme et renvoie au premier plan

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

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

<br/>

$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

<br/>

. <br/>

<br/>

À 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.

<br/>

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

<br/>

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

<br/>

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

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



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!

É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