gpt4 book ai didi

PHP - json_encode(string, JSON_UNESCAPED_UNICODE) 不转义捷克字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:08:35 24 4
gpt4 key购买 nike

我正在从数据库中选择一些数据并将它们编码为 json,但我遇到了像

这样的捷克符号的问题

á,í,ř,č,ž...

我的文件是 utf-8 编码,我的数据库也是 utf-8 编码,我也将 header 设置为 utf-8 编码。请问我还应该做什么?

我的代码:

header('Content-Type: text/html; charset=utf-8');
while($tmprow = mysqli_fetch_array($result)) {
$row['user'] = mb_convert_encoding($tmprow['user'], "UTF-8", "auto");
$row['package'] = mb_convert_encoding($tmprow['package'], "UTF-8", "auto");
$row['url'] = mb_convert_encoding($tmprow['url'], "UTF-8", "auto");
$row['rating'] = mb_convert_encoding($tmprow['rating'], "UTF-8", "auto");

array_push($response, $row);
}

$json = json_encode($response, JSON_UNESCAPED_UNICODE);

if(!$json) {
echo "error";
}

和部分打印的json:"package":"zv???tkanalouce"

编辑:如果没有 mb_convert_encoding() 函数,打印的字符串为空并打印“error”。

最佳答案

使用示例中的代码,输出为:

json_encode($response, JSON_UNESCAPED_UNICODE);
"package":"zv???tkanalouce"

您会在其中看到问号,因为它们是由 mb_convert_encoding 引入的。当您使用编码检测(“auto”作为第三个参数)并且编码检测无法处理输入中的字符,将其替换为问号时,会发生这种情况。示例代码行:

$row['url'] = mb_convert_encoding($tmprow['url'], "UTF-8", "auto");

这也意味着来自您数据库的数据不是 UTF-8 编码,因为mb_convert_encoding($buffer, 'UTF-8', 'auto'); 如果 $buffer 是 UTF-8 编码,则不会引入问号。

因此您需要找出在您的数据库连接中使用了哪个字符集,因为数据库驱动程序会将字符串转换为连接的编码。

最简单的方法是,您只需根据该数据库链接告诉您您要求的是 UTF-8 字符串,然后就可以使用它们:

$mysqli = new mysqli("localhost", "my_user", "my_password", "test");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* change character set to utf8 */
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
printf("Current character set: %s\n", $mysqli->character_set_name());
}

前面的代码示例只是展示了如何使用 mysqli 将默认客户端字符集设置为 UTF-8。它是 taken from the manual ,请参阅我们在网站上的相关 Material ,例如utf 8 - PHP and MySQLi UTF8 .

然后您可以大大改进您的代码:

$response = $result->fetch_all(MYSQLI_ASSOC);

$json = json_encode($response, JSON_UNESCAPED_UNICODE);

if (FALSE === $json) {
throw new LogicException(
sprintf('Not json: %d - %s', json_last_error(), json_last_error_msg())
);
}

header('Content-Type: application/json');
echo $json;

关于PHP - json_encode(string, JSON_UNESCAPED_UNICODE) 不转义捷克字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com