为什么我的php没有返回正确的json?(“预期UTF-8、UTF-16或UTF-32”)
我在iOS中使用Alamofire时遇到问题,因为我的php似乎没有返回有效的json。我在编码数组之前添加了标题“header”(“Content-Type:application/json;charset=utf-8”);”,但它仍然不起作用。如果重要的话,我的数据库表中的某些列正在使用utf8mb4\U unicode\U ci编码这是我的php:为什么我的php没有返回正确的json?(“预期UTF-8、UTF-16或UTF-32”),php,json,encoding,Php,Json,Encoding,我在iOS中使用Alamofire时遇到问题,因为我的php似乎没有返回有效的json。我在编码数组之前添加了标题“header”(“Content-Type:application/json;charset=utf-8”);”,但它仍然不起作用。如果重要的话,我的数据库表中的某些列正在使用utf8mb4\U unicode\U ci编码这是我的php: <?php $con = mysqli_connect("localhost","hide","hide","hide");
<?php
$con = mysqli_connect("localhost","hide","hide","hide");
mysqli_set_charset($con, "utf8");
if(mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "SELECT * FROM Business";
if($result = mysqli_query($con, $sql))
{
$resultArray = array();
$tempArray = array();
while($row = $result->fetch_object())
{
$tempArray = $row;
array_push($resultArray, $tempArray);
}
header("Content-Type: application/json; charset=utf-8");
echo json_encode($resultArray);
}
mysqli_close($result);
mysqli_close($con);
?>
[{"business_id":"0","imageURL":"imageUrl","shortDescription":"shortDescription","longDescription":"longDescription","price":"price","specialText":"specialText","order_rank":"1"}]
这里是格式化的json指定错误:
<?php
$con = mysqli_connect("localhost","hide","hide","hide");
mysqli_set_charset($con, "utf8");
if(mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "SELECT * FROM Business";
if($result = mysqli_query($con, $sql))
{
$resultArray = array();
$tempArray = array();
while($row = $result->fetch_object())
{
$tempArray = $row;
array_push($resultArray, $tempArray);
}
header("Content-Type: application/json; charset=utf-8");
echo json_encode($resultArray);
}
mysqli_close($result);
mysqli_close($con);
?>
[{"business_id":"0","imageURL":"imageUrl","shortDescription":"shortDescription","longDescription":"longDescription","price":"price","specialText":"specialText","order_rank":"1"}]
如果表的字符集是
utf8mb4
,则需要设置mysqli\u set\u字符集('utf8mb4')
,而不是mysqli\u set\u字符集('utf8')
是字符集排序吗?如果是这样的话,我的“校勘”是拉丁文的,瑞典文的。我现在将我的表排序规则(字符集)更改为utf8\u general\u ci,现在我要看看情况是否更好:将表字符集更改为utf8并没有解决问题:(现在更改为utf8mb4\u unicode\u ciCollation不是字符集。字符集是符号的解码方式,而排序规则是字母的比较方式(加权)一个接一个。排序规则用于字母排序,它用作MySQL的查找表,因此它知道如何对重音字母等进行排序。表字符集应该是utf8
,连接字符集应该是utf8
。当json\u encode
失败时,您可以随时检查json\u last\u error\u msg()发生了什么
如果您打印了正在编码的数组,这样您就可以准确地发现哪个字符导致了问题。如果您的表的字符集是utf8mb4
,您需要设置mysqli\u set\u字符集('utf8mb4')
,而不是mysqli\u set\u字符集('utf8')
是字符集排序规则吗?如果是,我的“排序规则”是拉丁文还是瑞典文?ci:s发现它是。我现在将我的表格排序规则(字符集)更改为utf8\u general\u ci,现在我要看看情况是否更好:将表格字符集更改为utf8并没有解决这个问题:(现在改为utf8mb4\u unicode\u)集合不是字符集。字符集是符号的解码方式,而排序规则是字母的比较方式(加权)一个接一个。排序规则用于字母排序,它用作MySQL的查找表,因此它知道如何对重音字母等进行排序。表字符集应该是utf8
,连接字符集应该是utf8
。当json\u encode
失败时,您可以随时检查json\u last\u error\u msg()发生了什么
如果您打印了正在编码的数组,这样您就可以准确地发现是哪个字符导致了问题,那就没问题了。