2

我正在创建一个小 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(不正确)因为 area 的值为“Centro Città”.. 和很快..

我该如何解决这个问题?

编辑:价值是

\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”:“

area 字段不为空,而是“Centro Città”。其余的都是正确的。我试图只显示带有 mysql_fetch_assoc($query) 的“区域”字段,它返回了正确的结果:“Centro Città”。这个问题只存在于 json_encode。

SQL 变量是:

$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。可能是与字符串和文本格式有关的问题吗?

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 回答