Maison  >  Article  >  développement back-end  >  Comment résoudre le problème des valeurs tronquées en php ajax

Comment résoudre le problème des valeurs tronquées en php ajax

藏色散人
藏色散人original
2020-09-01 10:31:352496parcourir

Solution à la valeur tronquée transmise par PHP ajax : 1. Utilisez l'encodage UTF8 pour les pages recto et verso et la base de données ; 2. Utilisez la méthode "mysql_query("set names gb2312");" la base de données ; 3. , Utilisez la fonction ICONV pour convertir l'encodage de la chaîne extraite de la base de données.

Comment résoudre le problème des valeurs tronquées en php ajax

Recommandé : "Tutoriel vidéo PHP"

Dans le développement de sites Web php, afin d'augmenter l'expérience utilisateur, Ajax C'est une technologie fréquemment utilisée, mais pour les débutants, ils rencontrent souvent le problème des caractères chinois tronqués lorsque Ajax transfère des valeurs. Existe-t-il un moyen de résoudre le problème des caractères chinois tronqués lorsque PHP AJAX transfère des valeurs ?

Nous savons que la technologie Ajax a évolué à partir de JavaScript et que JavaScript utilise le codage UTF-8. Lorsque la page d'arrière-plan actuelle utilise GBK ou un autre codage et qu'aucune conversion de codage n'est effectuée, le problème des caractères chinois tronqués se produira.

Solution aux caractères chinois tronqués dans le transfert de valeur PHP Ajax

Méthode 1. Les pages avant et arrière et la base de données utilisent uniformément l'encodage UTF8.

Méthode 2 : Lorsque le site Web a adopté un encodage tel que GBK/GB2312, il existe deux situations :

1. Lorsque Ajax envoie des caractères chinois et que PHP (programme backend) reçoit des caractères tronqués, utilisez la fonction de conversion entre GBK et UTF8 pour convertir l'encodage de la chaîne reçue, puis la stocker dans la base de données appropriée. Il est supposé que l'encodage utilisé par la base de données est GBK ou GB2312 si l'environnement d'exécution PHP configuré prend en charge la fonction ICONV. , vous pouvez également utiliser la fonction ICONV. Conversion de code, puis

mysql_query("set names gb2312");

peut résoudre le problème chinois tronqué du transfert de valeur Ajax lors de l'enregistrement dans la base de données.

2. Lorsque PHP envoie des caractères chinois et qu'Ajax (page d'accueil) reçoit des caractères tronqués, vous pouvez également utiliser la fonction ICONV pour convertir l'encodage de la chaîne extraite de la base de données, puis transmettre la valeur à l'Ajax. réception, c'est-à-dire ResponseText . Ou ajoutez

header('Content-type: text/html;charset=gb2312');

avant le flux de caractères de sortie PHP (programme backend). Remarque particulière : lorsque vous utilisez Ajax pour effectuer une liaison à plusieurs niveaux (telle qu'une liaison province-ville), utilisez le formulaire d'interaction XML et l'en-tête doit être ajouté avant de générer du XML.

Dans le même temps, la fonction de conversion entre GB2312 et UTF8 est publiée, afin que chacun puisse avoir une autre solution lorsqu'il rencontre le problème tronqué du chinois Ajax.

function gb2utf8($gb,$filename)
{
    if(!trim($gb))
    return $gb;
    //$filename="gb2312.txt";
    $tmp=file($filename);
    $codetable=array();
    while(list($key,$value)=each($tmp))
    $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
    $utf8="";
    while($gb)
    {
        if (ord(substr($gb,0,1))>127)
        {
            $thisgb=substr($gb,0,2);
            $gb=substr($gb,2,strlen($gb));
            $utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($thisgb))-0x8080]));
        }
        else
        {
            $gb=substr($gb,1,strlen($gb));
            $utf8.=u2utf8(substr($gb,0,1));
        }
    }
    $ret="";
    for($i=0;$i<strlen($utf8);$i+=3)
    $ret.=chr(substr($utf8,$i,3));
    return $ret;
}
function u2utf8($c)
{
    for($i=0;$i<count($c);$i++)
    $str="";
    if ($c < 0x80) {
        $str.=$c;
    }
    else if ($c < 0x800) {
        $str.=(0xC0 $c>>6);
        $str.=(0x80 $c & 0x3F);
    }
    else if ($c < 0x10000) {
        $str.=(0xE0 $c>>12);
        $str.=(0x80 $c>>6 & 0x3F);
        $str.=(0x80 $c & 0x3F);
    }
    else if ($c < 0x200000) {
        $str.=(0xF0 $c>>18);
        $str.=(0x80 $c>>12 & 0x3F);
        $str.=(0x80 $c>>6 & 0x3F);
        $str.=(0x80 $c & 0x3F);
    }
    return $str;
}

Remarque : Cette fonction nécessite l'utilisation de la table d'encodage chinois GB2312, veuillez cliquer ici pour télécharger. Puisque gb2312 est utilisé, certains mots rares peuvent être tronqués lors de la conversion.

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