2010-08-23 17 views
0

J'utilise la fonction JSON.stringify() pour stringifier les objets JS pour l'envoi AJAX à PHP.Caractères Unicode de JSON.stringify à de vrais caractères Unicode

Le problème se pose lorsque la fonction JSON.stringify code des caractères Unicode pour formater \uxxxx (par exemple \u000a). Ma question est de savoir comment convertir ces caractères en caractères Unicode réguliers en PHP?

+0

double possible de [UTF-16 sortie? Un peu coincé.] (Http://stackoverflow.com/questions/3506988/output-utf-16-a-little-stuck) – Artefacto

Répondre

4

Voir Output UTF-16? A little stuck

Cela convertit en UTF-8:

function unescape_utf16($string) { 
    /* go for possible surrogate pairs first */ 
    $string = preg_replace_callback(
     '/\\\\u(D[89ab][0-9a-f]{2})\\\\u(D[c-f][0-9a-f]{2})/i', 
     function ($matches) { 
      $d = pack("H*", $matches[1].$matches[2]); 
      return mb_convert_encoding($d, "UTF-8", "UTF-16BE"); 
     }, $string); 
    /* now the rest */ 
    $string = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 
     function ($matches) { 
      $d = pack("H*", $matches[1]); 
      return mb_convert_encoding($d, "UTF-8", "UTF-16BE"); 
     }, $string); 
    return $string; 
} 
+0

Erreur d'analyse: erreur de syntaxe, inattendue T_FUNCTION dans ... Erreur dans le code. – Stazh

+0

@Stazh Vous utilisez PHP <5.3. Il est facile de contourner le problème, il suffit de définir les fonctions nommées et de transmettre une chaîne avec leur nom à preg_replace_callback. – Artefacto

+0

Fonctionne bien! Merci! – Stazh