2

I'm creating a little php file to get mysql rows for my android application. to retrieve each single row i use:

    $q=mysql_query($sql, $this->conn) or die (mysql_error());
while($e=mysql_fetch_assoc($q)) {
      $output[]=$e;
    }
print(json_encode($output));

but sometimes it returns me an inconsistent output.

Here's an example: The row:

id=1 (correct) - name="name1" (correct) - price=200 (correct) - price2=null (correct) - area=null (NOT CORRECT) because area has a value of "Centro Città" .. and so on..

How can i resolve this problem?

EDIT: the value is

[{"id":"84","idutente1":null,"idutente2":null,"idutente3":null,"idutente4":null,"idutente5":null,"idagente":null,"annuncio":"0","archiviato":"0","dataarchiviazione":"2012-07-05 13:31:19","tipoimmobile":"Residenziale","metodo":"Vendita","area":null,"presentazione":"1","homepage":"1","mappa":"1","nome":"Piazza Umberto I","luogo":"Crotone","descrizione":"60 mq composto da due vani oltre servizi, centralissimo buono per ufficio.","descdettagliata":" L'appartamento è diviso in due vani con cucina e bagno.</p>\r\nPosto nel pieno centro e vicinissimo al lungomare Regina Margherita.</p>\r\n Ottimo condominio. Libero e disponibile da subito. /p>","vani":"2","prezzo":"87000","prezzo1":"0","prezzo2":"0","prezzo3":"0","prezzo4":"0","prezzo5":"0","metriquadri":"58","stato":"In buono stato","riscaldamento":"Autonomo","classeenergetica":"Non dotato","piano":"Primo/secondo/terzo","indicazioni":"","mutuo":"No","banca":"","importo":"","finalita":"","tipologia":"","ammortamento":"","visite":"20","timestamp":"2012-06-25 10:48:01","nomefile":"HPIM2268.jpg"}]

area field is not null, but is "Centro Città". The rest is correct. I tried to show only the "area" field with a mysql_fetch_assoc($query) and it returns me the correct result: "Centro Città". This problem is only with json_encode.

The SQL Variabile is:

$sql = sprintf("SELECT i.*, f.nomefile FROM immobili i LEFT JOIN foto f on(i.id=f.idimmobile AND f.copertina=1) WHERE i.id=%s", $_GET['id']);

This is only an example, if i ask other rows, the area field returns correctly also with json_encode and other fields return null. Could it be a problem related with the strings and the text format?

4

2 に答える 2

5

Problem solved

$result = $mysql->query($sql);
while($row = mysql_fetch_assoc($result)) {
   $r[] = array_map('utf8_encode', $row);
}
echo json_encode($r);

Thank you

于 2012-07-05T15:08:30.980 に答える
4

これはエンコーディングの問題です。json_encode()UTF-8文字列のみを受け入れnull、文字列が有効でない場合はUTF-8を返します。

これを修正するには、データをjson_encodeに渡す前にデータのエンコーディングを変換します。iconv()またはを見てくださいmb_convert_encoding()

たとえば、データがlatin1でエンコードされていると仮定します。

$e = array_map(function($string) {
    return iconv("iso-8859-1", "utf-8", $string);
}, $e);

$output[] = $e;

または、php <5.3の場合:

function cb($string) {
    return iconv("iso-8859-1", "utf-8", $string);
}

$e = array_map('cb', $e);

$output[] = $e;
于 2012-07-05T13:46:31.190 に答える