11
votes

Comment obtenir JSON_ENCODE () pour travailler avec ISO-8859-1 (Åäö)

json_encode () ne fonctionnera pas pour moi quand j'utilise ¥ äö. Pourquoi? Et comment puis-je le faire fonctionner?

Le php : xxx

JavaScript : xxx

quand i alerte () la réponse et la réponse contient ¥, ä ou ö, la réponse est = null

S'il vous plaît, aidez-moi à sortir ...


6 commentaires

Quelle sortie obtenez-vous? Quelle bibliothèque JSON utilisez-vous?


La sortie est null s'il contient Å, Ä ou Ö. La bibliothèque JSON est JSON.ORG/JSON2.JS


Quelle version PHP utilisez-vous? Je crois que les premières versions de JSON_ENCODE () uniquement manipulées les chaînes UTF-8 correctement. Essayez utf8_encode -ing la chaîne avant de coder et de voir si cela fonctionne.


La version PHP est 5.Quelque chose. Ont essayé utf8_encode mais cela n'a pas fonctionné pour moi.


En fait, utf8_encode a fonctionné :) !!! Heureux à nouveau.


@gunderwonder. Si vous souhaitez céder à votre réponse, faites-vous commenter une réponse ...


8 Réponses :


12
votes

Il est dit dans le json_encode () Documentation :

Cette fonction fonctionne uniquement avec les données codées UTF-8.

Vous devez le convertir en utf-8 avec iconv ou mbstring premier.


0 commentaires

7
votes

Comme Greg mentionné, je devais encoder Åäö à utf-8 . Mais je n'utilisais pas iconv ou mbstring. Quand i utf8_encode () Toutes les valeurs avant de mettre les valeurs au tableau Le problème a été résolu.


2 commentaires

Je suis confronté à un problème similaire, où j'ai une matrice associative qui doit être codée. J'ai essayé array_walk_recursive () avec si (isstring ($ saisir)) {return utf_encode ($ entrée); } else {revenir $ entrée} pour le rappel mais qui ne semblait pas fonctionner. Des idées?


@Ticom ma solution ci-dessous trie ça.



0
votes

Utilisation de la méthode standard lors de la lecture de MySQL:

$resultArray = array();
while($obj = MySQL_fetch_object($res)) {
 foreach($obj as $key => $value) {
  if (!is_null($value)) {
   $obj->$key = utf8_encode($value);
  }
 }
 $resultArray[] = $obj;
}
$result = json_encode($resultArray);


0 commentaires

2
votes

JSON définit des chaînes comme unicode!

Définition JSON

Vous devez vous encoder ISO à UTF-8


0 commentaires

0
votes

the $ données (dans mon cas) est un tableau avec des valeurs de texte comme ISO-8859-1 . Le truc ci-dessous prépare $ données à utiliser avec json_encode . xxx


0 commentaires

6
votes

Cette fonction lancera le type de données correct pour la sortie JSON et UTF8_encode les chaînes.

    /* Change data-type from string to integar or float if required.
     * If string detected then utf8_encode() it. */
    function cast_data_types ($value) {
      if (is_array($value)) {
        $value = array_map('cast_data_types',$value);
        return $value;
      }
      if (is_numeric($value)) {
        if(strpos('.', $value)===false) return (float)$value;
        return (int) $value;
      }
      return utf8_encode((string)$value);
    }

json_encode (cast_data_types($data));


1 commentaires

Travaillé dans mon cas. Merci.



1
votes

Une ancienne question, mais je figureais cela ici au cas où quelqu'un doit enregistrer des données à l'aide de JSON_ENCODE, mais gardez les données intactes, intactes pour l'inspection ultérieure.

Vous pouvez encoder les données RAW en utilisant base64_encode , il fonctionnera avec json_encode . Plus tard après avoir exécuté json_decode , vous pouvez décoder la chaîne avec base64_decode , vous obtiendrez les données d'origine non modifiées.


0 commentaires

1
votes

AS de PHP 5.4.0:

Convertissez vos chaînes dans votre matrice dans utf-8 à l'aide de utf8_encode ($ str) fonction.

alors json_encode avec json_unescaped_unicode option:

$ arr = json_encode ($ Array, json_unescaped_unicode);


0 commentaires