PHP没有显示正确的结果

时间:2016-03-15 17:50:24

标签: php json utf-8 encode

我的问题是我的查询结果对人类来说是不可读的。 我在浏览器中得到了这个结果:

ID: 5 Reg.date: 2016-02-29 18:57:52 C�si

名字应该是'Cósi'。 php是UTF-8,数据库是utf8-hungarian-ci。 所以我进行查询,然后将结果放入$ user数组中,我回显前3个项目,如:echo "ID: " . $user["userID"] . "Reg.date: " . $user["regdate"] . $user["name"]; 我试过header('Content-type: text/html; charset=UTF-8');,但它都不起作用。 我有一个innoDB phpmyadmin数据库,但服务器是我父亲的电脑。一个xampp,我应该在那里搜索问题吗? 这是所有的PHP:

$con = mysqli_connect("127.0.0.1", "kxxx", "csxxx", "bxxx");
$password = "asd";
$username = "carrie@gmail.com";
$statement = mysqli_prepare($con, "SELECT * FROM user WHERE email = ? AND password = ?");
mysqli_stmt_bind_param($statement, "ss", $username, $password);
mysqli_stmt_execute($statement);

mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $userID, $reg_date, $name, $email, $password, $phonenumber);
$user = array();

while(mysqli_stmt_fetch($statement)){
    $user["userID"] = $userID;
    $user["regdate"] = $reg_date;
    $user["name"] = $name; / which should be "Cósi"
    $user["email"] = $email;
    $user["password"] = $password;
    $user["phonenumber"] = $phonenumber;
}
echo "ID: " . $user["userID"] . "Reg. dátum: " . $user["regdate"] . $user["name"];

echo json_encode($user, JSON_UNESCAPED_UNICODE);

如果显示空[],json_encode将消失,但不是,只显示数组的前3项。

所以我希望C si成为Cósi。我该怎么办?我试图将元标记更改为charset ='utf-8',mysql_query(“SET NAMES'utf8'”)和我上面提到的标题内容,所有列都是utf8-hungarian-ci,所有表和数据库也是....所以也许服务器配置是床?

当我通过php插入数据库时​​,在数据库中显示'Cósi',所有内容都保存在数据库中。

谢谢伙计们,我已经解决了

mysqli_set_charset($con, 'utf8mb4');

2 个答案:

答案 0 :(得分:0)

您需要正确的html标记:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Your Page Title</title>
</head>

<body>

YOUR CONTENT HERE

</body>
</html>

答案 1 :(得分:0)

在php中检查mb_convert_encoding。

$str = mb_convert_encoding($str, "UTF-8", "utf8-hungarian-ci");