我必须使用什么字符集来从json_encode获取值?

时间:2015-06-01 18:57:00

标签: php mysql character-encoding phpmyadmin slim

我正在尝试使用我的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();
    }
});

我尝试了什么:

  1. 更改此内容:

    $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);
    
  2. 将字符集更改为utf8mb4,但不起作用。

  3. 尝试使用json_encode($users, JSON_UNESCAPED_UNICODE );,但结果是一样的。
  4. 我认为编码可能是错误的,因为我在我的数据库上使用了西班牙语字符,例如ñó é á ú,但我看到我的数据库的西班牙字符的推荐编码是utf8_general_ci

    utf8_general_ci是否有特殊的字符集?你知道用json_encode从我的数据库中检索信息的另一种方法吗?在我得到一个空白页面之前,我尝试了所有可能的解决方案。

0 个答案:

没有答案