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à