Dans le processus de développement utilisant PHP combiné avec AJAX, nous pouvons rencontrer un problème courant, c'est-à-dire que des caractères tronqués apparaissent lors de la transmission en chinois. En effet, la méthode de codage par défaut utilisée par PHP est ISO-8859-1, tandis que la méthode de codage par défaut utilisée par AJAX est UTF-8. Les deux ne sont pas compatibles, ce qui entraîne des caractères tronqués pendant le processus de transmission. Cet article explique comment résoudre le problème des caractères chinois tronqués transmis par PHP et AJAX.
AJAX est une solution d'interaction asynchrone entre le front-end et le back-end. Grâce à AJAX, vous pouvez envoyer des requêtes au back-end sans actualiser la page et vous pouvez recevoir les données renvoyées par. l'arrière. Lors de l'utilisation d'AJAX pour la transmission en chinois, des caractères tronqués peuvent apparaître.
Par exemple, la simple requête AJAX suivante :
$.ajax({ url: "test.php", type: "POST", data: { name: "张三", age: 20 }, success: function (result) { console.log(result); } });
Dans le code ci-dessus, nous avons envoyé une requête POST à test.php et transmis une donnée avec "nom" comme "Zhang San" et "âge" comme 20 . Cependant, lorsque nous recevons ce paramètre de requête sur le backend, des caractères chinois tronqués apparaîtront.
La solution à ce problème est très simple, il suffit de convertir les données en codage UTF-8 avant d'envoyer la requête AJAX. Modifiez le code ci-dessus comme suit :
$.ajax({ url: "test.php", type: "POST", data: { name: encodeURIComponent("张三"), age: 20 }, success: function (result) { console.log(result); } });
Dans le code ci-dessus, nous utilisons encodeURIComponent pour encoder "name" et convertir le chinois en encodage UTF-8, afin d'éviter les caractères chinois tronqués.
Dans le chapitre précédent, nous avons présenté comment effectuer la conversion d'encodage dans les requêtes AJAX, alors comment recevoir ces données codées en UTF-8 dans le back-end PHP ?
En PHP, nous pouvons obtenir les paramètres de la requête POST via $_POST. Cependant, par défaut, la méthode d'encodage utilisée par PHP est ISO-8859-1, qui est incompatible avec l'encodage UTF-8, nous devons donc effectuer la conversion d'encodage correspondante lors de l'obtention des données.
Modifiez le fichier test.php comme suit :
<?php header('Content-Type:text/html;charset=utf-8');//设置响应头为utf-8编码 $name = $_POST["name"]; $name = iconv("utf-8","gbk",$name);//将数据由utf-8编码转为gbk编码 echo $name; ?>
Dans le code ci-dessus, nous définissons d'abord l'en-tête de réponse sur l'encodage UTF-8, puis obtenons les paramètres via $_POST, et enfin utilisons la fonction iconv pour convertir l'UTF- 8 paramètres codés Encodez GBK pour éviter les caractères chinois tronqués.
Dans les applications réelles, nous transmettons généralement les données au format JSON. Lors de la transmission du chinois via JSON, vous devez également faire attention aux problèmes d'encodage.
Par exemple, les données JSON simples suivantes :
var data = { name: "张三", age: 20 };
Dans le code ci-dessus, nous définissons une donnée JSON contenant les attributs "name" et "age", où "name" est le "Zhang San" chinois.
Lors de la transmission des données JSON au PHP back-end, les données doivent également être codées et converties. Modifiez le code ci-dessus comme suit :
var data = { name: encodeURIComponent("张三"), age: 20 };
Dans le code ci-dessus, nous utilisons encodeURIComponent pour encoder "name" et convertir le chinois en encodage UTF-8, afin d'éviter les caractères chinois tronqués.
Dans le back-end PHP, la conversion d'encodage correspondante est également requise. Modifiez le fichier test.php comme suit :
<?php $data = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents('php://input');//获取JSON数据 $data = json_decode($data,true);//将JSON数据解码为数组 $name = $data["name"]; $name = iconv("utf-8","gbk",$name);//将数据由utf-8编码转为gbk编码 echo $name; ?>
Dans le code ci-dessus, nous obtenons d'abord les données JSON via $GLOBALS['HTTP_RAW_POST_DATA'] ou file_get_contents('php://input'), puis décodons les données JSON via json_decode, et enfin utilisez la fonction iconv pour convertir les paramètres codés UTF-8 en codage GBK, afin d'éviter les caractères chinois tronqués.
Lors du développement en utilisant PHP combiné avec AJAX, vous pouvez rencontrer des caractères tronqués lors de la transmission en chinois. Afin de résoudre ce problème, nous devons encoder les données pour les rendre compatibles avec l'encodage par défaut de PHP. Lorsque vous utilisez JSON pour le transfert de données, vous devez également faire attention aux problèmes d'encodage. Grâce à l'introduction de cet article, j'espère qu'il pourra aider les lecteurs à résoudre le problème des caractères chinois tronqués transmis par PHP et AJAX.
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!