Maison  >  Article  >  développement back-end  >  Que dois-je faire si des caractères tronqués apparaissent lorsque JS lit les cookies chinois définis dans PHP ?

Que dois-je faire si des caractères tronqués apparaissent lorsque JS lit les cookies chinois définis dans PHP ?

coldplay.xixi
coldplay.xixioriginal
2020-07-29 15:29:262447parcourir

Solution au code tronqué lorsque JS lit le cookie chinois défini en PHP : 1. Utilisez d'abord la fonction d'échappement pour encoder en PHP, et utilisez le décodage unescape dans js lorsque vous atteignez le client ; ( )] fonction pour remplacer la valeur du cookie.

Que dois-je faire si des caractères tronqués apparaissent lorsque JS lit les cookies chinois définis dans PHP ?

Solution au code tronqué lorsque JS lit les cookies chinois définis en PHP :

En PHP utilisez d'abord le fonction d'échappement pour encoder et utiliser le décodage sans échappement dans js lorsque vous atteignez le client.

la fonction d'échappement est la suivante :

function escape($str)  
{      
       preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);      
       $ar    =    $r[0];   
        foreach($ar   as   $k=>$v)       
        {            
           if(ord($v[0]) < 128)  
               $ar[$k] = rawurlencode($v);
            else    
               $ar[$k]    =    "%u".bin2hex(iconv("GB2312","UCS-2",$v));   
       }   
       return    join("",$ar);   
}

Exemple : test.php

<?php
function    escape($str)    {   
   preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);   
   $ar    =    $r[0];   
   foreach($ar    as    $k=>$v)    {   
    if(ord($v[0])    <    128)   
     $ar[$k]    =    rawurlencode($v);   
    else   
     $ar[$k]    =    "%u".bin2hex(iconv("GB2312","UCS-2",$v));   
   }   
   return    join("",$ar);   
}
$name = escape("深圳人");
setcookie("name", $name);
?>
<scrīpt>
function get_cookie(name)
{
var result = null;
var myCookie = document.cookie + ";";
var searchName = name + "=";
var startOfCookie = myCookie.indexOf(searchName);
var endOfCookie;
if (startOfCookie != -1)
{
   startOfCookie += searchName.length;
   endOfCookie = myCookie.indexOf(";",startOfCookie);
   result = unescape(myCookie.substring(startOfCookie, endOfCookie));
}
return result;
}
</scrīpt>
<scrīpt>
document.write("js:" + unescape(getCookie("name")));
</scrīpt>

Il existe également une autre méthode :

En PHP5, vous pouvez utiliser setrawcookie() Fonction à la place, elle n'est pas codée lors de la définition de la valeur du cookie, il n'est donc pas nécessaire de l'encoder avec la fonction d'échappement lors de la définition du cookie. À ce moment, JS peut également lire directement la valeur du cookie

.

Recommandations d'apprentissage associées : Programmation PHP du débutant au compétent

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