Visualizzazione risultati 1 fino 5 di 5

Discussione: Problemi con json_encode()

  1. #1
    Guest

    Predefinito Problemi con json_encode()

    Buongiorno a tutti!

    Ho preso uno spazio su Altervista e dopo aver caricato il mio piccolo sito con creazione del DB mi trovo a fronteggiare un problema a cui non trovo soluzione.

    Come da titolo il problema è nella funzione json_encode().
    Utilizzo in una pagina una funzione $get che preleva dei dati dal DB tramite una pagina php.
    In questa pagina dopo la query al DB codifico l'array con la funzione json_encode() per poi elaborarlo nella funzione inziale jQuery.
    E qui si presenta il problema, se un dato ha un carattere speciale come per esempio "à" la funzione json_encode mi riporta null.
    All'inizio leggendo anche qualche forum pensavo fosse un problema di codifica con il DB ma era settato UTF8_unicode_ci e mi sembrava strano.
    Cosi leggendo ancora parlavano della codifica dello stesso file php che io ho importato in altervista.
    Allora sono entrato nel pannello di controllo e ho creato un file php exnovo direttamente da web e ci ho scritto dentro il seguente codice:


    Codice PHP:
    <?php

    $row
    = array("id" => "1","descrizione" => "già");
    echo
    json_encode($row);
    echo
    '<br>'.json_last_error();

    ?>
    quando lo eseguo mi ritorna:

    Codice HTML:
    {"id":"1","descrizione":null}
    5
    Quindi il problema non è legato alla codifica del DB, ne alla codifica del file php... ma allora cosa può essere?!?

    Lascio il link alla pagina esempio se qualcuno volesse fare qualche prova:http://daunazanzara.altervista.org/test.php

  2. #2
    Guest

    Predefinito

    Ciao, potresti provare a codificare la stringa in PHP con urlencode(), poi da JavaScript la decodifichi con decodeURI(). In questo modo vengono usati solo caratteri ASCII nel passaggio tramite JSON.

    EDIT: lato JavaScript è necessario usare unescape invece di decodeURI. Ho descritto la soluzione in modo più dettagliato più avanti.
    Ultima modifica di noktalk : 22-11-2013 alle ore 09.45.12

  3. #3
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    No, il problema è legato alla codifica del testo (come peraltro ti indica il codice di errore).
    Se non erro, i documenti creati mediante il pannello di controllo di AlterVista non hanno codifica UTF8.
    Il codice che hai riportato, in uno script PHP codificato in UTF8 produce il risultato corretto: http://karl94.altervista.org/p.php.

  4. #4
    Guest

    Predefinito

    Ok quindi dovrei prendere i miei file attuali che generano errore e salvarli nuovamente con estensione corretta .php o .html ma con codifica UTF8?
    Io ho usato Dreamweaver CS6 per creare il sito, qualcuno sa per caso se e dove posso verificare in che codifica salva i file?

  5. #5
    Guest

    Predefinito

    La soluzione che ho proposto serve solo ad aggirare il problema, evitando di codificare le pagine in UTF8 (mi rendo conto però che non è quella ottimale). La descrivo qui in modo più dettagliato, magari può essere utile a qualcuno.

    Premetto che non avendo fatto dei test prima del mio messaggio precedente mi sono accorto di aver fatto un errore, dato che la funzione lato JavaScript da utilizzare non è decodeURI, ma unescape.

    Il codice PHP utilizzato è il seguente:
    Codice PHP:
    <?php

    $data
    = array(
    'id' => '1',
    'descrizione' => urlencode('già già')
    );

    echo
    json_encode($data);
    Il risultato è:
    Codice:
    {"id":"1","descrizione":"gi%E0+gi%E0"}
    Lato client ho fatto così:
    Codice:
    <!doctype html>
    <html>
    <head>
      <script src="js/jquery.js"></script>
      <script>
        $(document).ready(function() {
          $.get('json.php', function(data) {
            $('#raw').text(data.descrizione)
    
            // Il motivo per cui si è usato .replace(/\+/g, '%20') si può trovare a questo indirizzo:
            //   http://stackoverflow.com/questions/4292914/javascript-url-decode-function
            $('#clear').text(unescape(data.descrizione.replace(/\+/g, '%20')))
          }, 'json');
        })
      </script>
      <meta charset="utf-8" />
    </head>
    <body>
    Risultato di json: <span id="raw"></span><br />
    Risultato decodificato: <span id="clear"></span>
    </body>
    </html>
    Il cui risultato è:
    Codice:
    Risultato di json: gi%E0+gi%E0
    Risultato decodificato: già già
    Ultima modifica di noktalk : 22-11-2013 alle ore 09.58.58

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •