我正在创建一个小的php文件来获取我的android应用程序的mysql行。 检索我使用的每一行:
$q=mysql_query($sql, $this->conn) or die (mysql_error());
while($e=mysql_fetch_assoc($q)) {
$output[]=$e;
}
print(json_encode($output));
但有时会让我输出不一致的信息。
这是一个例子: 行:
id = 1(正确) - name =“name1”(正确) - price = 200(正确) - price2 = null(正确) - area = null(NOT CORRECT)因为区域有价值“CentroCittà”......等等..
我该如何解决这个问题?
编辑:值为
[{ “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“,”主页“:”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èdivisoin 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> “中, ”瓦尼“: ”2“, ”PREZZO“: ”87000“, ”prezzo1“: ”0“, ”prezzo2“: ”0“, ”prezzo3“: ”0“, ”prezzo4“:” 0“,”prezzo5“:”0“,”metriquadri“:”58“,”stato“:”在buono stato“,”riscaldamento“:”Autonomo“,”classeenergetica“:”Non dotato“,”piano“: “普里莫/ SECONDO / terzo”, “indicazioni”: “”, “墨脱”: “没有”, “邦卡”: “”, “importo”: “”, “finalita”: “”, “tipologia”: “” ,“ammortamento”:“”,“visite”:“20”,“timestamp”:“2012-06-25 10:48:01”,“nomefile”:“HPIM2268.jpg”}]
区域字段不为空,而是“CentroCittà”。其余的都是正确的。 我试图只显示带有mysql_fetch_assoc($ query)的“area”字段,它返回正确的结果:“CentroCittà”。这个问题只适用于json_encode。
SQL Variabile是:
$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']);
这只是一个例子,如果我问其他行,区域字段也正确返回json_encode,其他字段返回null。这可能是与字符串和文本格式相关的问题吗?
答案 0 :(得分:5)
问题已解决
$result = $mysql->query($sql);
while($row = mysql_fetch_assoc($result)) {
$r[] = array_map('utf8_encode', $row);
}
echo json_encode($r);
谢谢
答案 1 :(得分: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;