Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    3

    UTF8 Encode di un Array per JSON (problema con accentate)

    Ciao a tutti,
    in preda alla disperazione provo a scrivere qui per un aiuto.

    Premesso che non sono un esperto di PHP ma che no necessità di utilizzarlo a supporto di un'altra applicazione, ho questo tipo di problema: dopo aver interrogato mySQL con una semplice SELECT ho necessità di fare json_encode sul risultato perchè poi sarà oggetto di parsing.

    Ho scoperto che l'encode json di una stringa deve essere UTF8 infatti il risultato laddove sono presenti delle accentate da un campo null.

    Quello che faccio è questo:

    while($obj = mysql_fetch_object($rs)) {
    $arr[] = $obj;
    $array = objectToArray($obj);
    $fab[] = array('Array'=>array_map("utf8_encode",$array));
    }

    $json_string = json_encode($fab);

    Dove objectToArray è una funzione che restituisce un'array a partire da l'oggetto restituito dal recordset.
    Il problema è che i caratteri accentati vengono convertiti (credo a seguito dell'encoding in UTF8) ad esempio con una notazione del tipo \u00c8 (lettera "é" maiuscola) mentre io credo di aver bisogno di leggere la lettera così come scritta nel DB perchè così il parsing mi fa crashare l'app.
    Il campo del DB ha come collation UTF8 e all'interno della tabella da CPanel leggo il contenuto regolarmente.
    Aggiungo che se faccio un print_r dell'array le accentate l vedo correttamente.

    Sicuramente mi manca qualche concetto base...spero in un aiuto che mi indirizzi verso una possibile soluzione alla decima ora sopra il problema sto gettando la spugna

    Grazie mille.

    Fabrizio

  2. #2
    Dovrebbe essere la funzione di parsing della stringa json a riconvertire le entita' utf8 in caratteri, esempio:

    Codice PHP:
    $arr = array(
        
    'valore' => 'àè',
    );
    print_r($arr);
    // output:
    // Array
    // (
    //    [valore] => àè
    // )


    $enc json_encode($arr);
    echo 
    $enc;
    // output:
    // {"valore":"\\u00e0\\u00e8"}

    print_r(json_decode($enc));
    // output:
    // stdClass Object
    // (
    //     [valore] => àè
    // )
    // 

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    3
    Intanto grazie per la risposta che ha un senso in effetti, sto cercando di capire come effettuare la decodifica nell'altro ambiente.

    Sto vedendo per che il metodo che ho usato in PHP per fare il json_encode mi genera delle stringhe che sono formattate diversamente rispetto al json_encode dell'array privo dell'applicazione del metodo utf8_encode: infatti nel primo caso, il risultato json è del tipo:

    [{"idCount":"186","latitude":"42.0143","longitude": .........

    mentre nel secondo, post utf8_encode ho una stringa del tipo:

    [{"Array":{"idCount":"186","latitude":"42.0143","lo ngitude":

    Facendo l'encode in questo modo:
    $fab[] = array("Array"=>array_map("utf8_encode",$array));

    C'è un modo per evitare che faccia comparire la scritta "Array" ?

    Grazie ancora per il preziosissimo aiuto.

    Fabrizio

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    3
    Originariamente inviato da fabgau


    C'è un modo per evitare che faccia comparire la scritta "Array" ?


    Fabrizio
    Scusate, ho risolto...

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.