所以我有一个php文件,它有一个函数,它返回一个编码到jason的数组,其中包含来自数据库的所有用户。如果由于任何原因我无法获得用户,则应将其编码为:
sucesso = 0;
erro = 1;
msg_erro = "error message..."
嗯,除了msg_erro之外,一切都很好,因为即使出现错误,响应也会以null值发送,这是...
<?php
function getUsers() {
require_once 'connection.php';
mysql_select_db($con_database, $con) or die("erro mysql_select_db() -> users.php");
$users = array();
$resposta = array("sucesso" => 0, "erro" => 0);
$query = "SELECT * FROM utilizador WHERE cod_utilizador = 'x-3219'";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
if($rows > 0) {
$resposta["sucesso"] = 1;
while($row = mysql_fetch_assoc($result)) {
$users[] = array("cod" => $row["cod_utilizador"],
"password" => $row["password"],
"nome" => $row["nome"],
"rank" => $row["tipo_utilizador"]);
}
$resposta["utilizadores"] = $users;
} else {
$resposta["erro"] = 1;
$resposta["msg_erro"] = "Não existem utilizadores na base de dados!";
}
return json_encode($resposta);
}
/*
$fp = fopen('resultados.json', 'w');
fwrite($fp, json_encode($resposta));
fclose($fp);
*/
?>
所以,这会产生错误,而且确实如此,除了像我说的那样的消息:
Array ( [sucesso] => 0 [erro] => 1 [msg_erro] => )
为什么msg_erro被发送为空?
答案 0 :(得分:0)
导致空字符串的常见罪魁祸首是给定的array
包含非UTF-8字符串,而json_encode()
仅包含支持UTF-8编码。
您可以在错误消息中提供任意纯ASCII字符串,以查看它是否是编码问题。
....
// error message block
} else {
$resposta["erro"] = 1;
$resposta["msg_erro"] = "plain ASCII text";
}
如果上述代码产生预期结果,则iconv或mb_convert_encoding会有所帮助。
https://stackoverflow.com/a/16607515/760211中解释了将array
转换为UTF-8。
答案 1 :(得分:0)
问题解决了,我刚刚定义了php文件的标题,然后数据传递时没有特殊的字符,所以我们不需要ut8_encode来自db的数据。
header('Content-Type: text/html; charset=utf-8');
答案 2 :(得分:-1)
可能是因为你阵列上的数据不是UTF-8。
我使用此功能修复:json_encode(recursiveUTF8($data));
function &recursiveUTF8(&$array) {
foreach ($array as $key => &$value) {
unset($new_key);
if (!mb_check_encoding($key, 'UTF-8')) {
$new_key = utf8_encode($key);
if (is_array($value)) {
unset($array[$key]);
$array[$new_key] = &$value;
} elseif (is_object($value)) {
unset($array->$key);
$array->$new_key = &$value;
}
$key = $new_key;
}
if (is_array($value) || is_object($value)) {
String::recursiveUTF8($value);
} elseif (!mb_check_encoding($value, 'UTF-8')) {
$value = utf8_encode($value);
}
}
return $array;
}