Maison  >  Article  >  développement back-end  >  Que dois-je faire si mon application php ajax renvoie des caractères tronqués ?

Que dois-je faire si mon application php ajax renvoie des caractères tronqués ?

coldplay.xixi
coldplay.xixioriginal
2020-07-11 14:49:572028parcourir

Solution au code tronqué renvoyé par l'application PHP ajax : 1. Convertissez les données reçues en GBK, le code est [iconv(utf-8,'gb2312'$_POST[Data])] ; utilisez JSON pour transmettre, le code est [$json_string=JSON($data)].

Que dois-je faire si mon application php ajax renvoie des caractères tronqués ?

Solution pour l'application php ajax renvoyant des caractères tronqués :

1. JS en arrière-plan

Les données AJAX, qu'elles utilisent directement le xmlHttprequest sous-jacent ou qu'elles utilisent l'ajax de jQuery pour la transmission de données, utiliseront ajax pour encoder et envoyer !

Si notre page est en UTF-8, il n'y a pas de problème ! Les données chinoises transmises ne seront pas tronquées !

Si c'est du GB2312~le problème vient ! Le GBK est converti en UTF-8 et envoyé en arrière-plan. A ce moment ce qui est reçu directement en arrière-plan est tronqué !

Solution : Lorsque le langage de fond est PHP

iconv('utf-8','gb2312',$_POST['Data']);

Le principe est très simple : Directement en arrière-plan La réception est UTF-8, et les pages sont toutes en GBK, puis reconvertissez simplement les données reçues en GBK

Ensuite, faites simplement l'opération de base de données. Stockez-les dans la base de données. Ils doivent ! être des caractères chinois normaux !

2. La page d'arrière-plan indique que les données de la base de données contiennent des caractères chinois, puis les renvoie à l'interface JS

Le PHP. page lit les caractères chinois normaux de la base de données et souhaite les renvoyer via AJAX~

Si elles sont renvoyées, les données seront renvoyées directement sous la forme d'une chaîne sans aucun traitement ! Oui ! Le chinois affiche tout normalement sur la première page !

Mais il faut généralement conditionner les données de fond sinon, les données reçues par la réception seront difficiles à traiter !

Si c'est le cas ! est PHP ! Ensuite, nous utilisons désormais généralement JSON pour la transmission ! De cette façon, les données transmises au JS front-end seront très faciles à décompresser et à utiliser !

Lors de l'exécution d'opérations de conversion json en arrière-plan PHP, le problème se pose !

Lors de la conversion de json, vous constaterez que le chinois lu dans la base de données apparaît NULL ou d'autres situations anormales. C'est parce que JSON n'échappe qu'à l'encodage !

Quoi qu'il en soit, JSON Lors de la conversion en chinois, des caractères tronqués apparaissent ~~

La solution est la suivante :

function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
 {
     static $recursive_counter = 0;
     if (++$recursive_counter > 1000) {
         die('possible deep recursion attack');
     }
     foreach ($array as $key => $value) {
         if (is_array($value)) {
             arrayRecursive($array[$key], $function, $apply_to_keys_also);
         } else {
             $array[$key] = $function($value);
         }
   
         if ($apply_to_keys_also && is_string($key)) {
             $new_key = $function($key);
             if ($new_key != $key) {
                 $array[$new_key] = $array[$key];
                 unset($array[$key]);
             }
         }
     }
     $recursive_counter--;
 }
 function JSON($array) {
     arrayRecursive($array, 'urlencode', true);
     $json = json_encode($array);
     return urldecode($json);
 }
$json_string=JSON($data);
//$obj = json_decode($json_string);
print_r($json_string);

Après ces processus, vous constaterez que les caractères chinois lisent de la base de données par l'arrière-plan PHP sont convertis avec succès au format json et en chinois Cela montre que tout est normal !

Bien sûr, les données reçues par la réception à ce moment sont au format JSON et les caractères chinois sont également normal !

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

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