我正在尝试使用我的GET函数创建REST API,并且我正在尝试检索我在phpMyAdmin中拥有的数据库的信息。我正在使用Slim Framework。
问题是当我尝试使用utf8_general_ci
检索我的数据库(用json_encode
编码)的信息时。当我尝试通过URL访问此GET功能时,我只看到一个空白页面。我发现了问题所在,因为我在var_dump($users);
之前的行使用了json_encode
,它检索了我存储在数据库中的信息。
我搜索了一下,发现我可以收到json_encode
json_last_error
函数的错误,所以我做了。
echo json_encode($users);
echo json_last_error();
它返回给我一个5,这意味着:JSON_ERROR_UTF8
。
然后我搜索了,我发现这是编码问题,可能是错误但我无法解决问题。
我的REST API的我的GET方法是:
<?php
if(!defined("SPECIALCONSTANT")) die("Access denied");
$app->get("/users/",function() use($app)
{
try{
$connection = getConnection();
$dbh = $connection->prepare("SELECT * FROM users");
$dbh->execute();
$users = $dbh->fetchAll();
$connection = null;
$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode($users));
}catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
});
我尝试了什么:
更改此内容:
$app->response->headers->set("Content-type","application/json");
$app->response->status(200);
$app->response->body(json_encode($users));
到此:
header("HTTP/1.1 200");
header("Content-Type:application/json; charset=utf-8");
echo json_encode($users);
将字符集更改为utf8mb4
,但不起作用。
json_encode($users, JSON_UNESCAPED_UNICODE );
,但结果是一样的。我认为编码可能是错误的,因为我在我的数据库上使用了西班牙语字符,例如ñ
或ó é á ú
,但我看到我的数据库的西班牙字符的推荐编码是utf8_general_ci
。
utf8_general_ci
是否有特殊的字符集?你知道用json_encode从我的数据库中检索信息的另一种方法吗?在我得到一个空白页面之前,我尝试了所有可能的解决方案。