- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在从数据库中选择一些数据并将它们编码为 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/
代码如下: <?php echo json_encode("中文"); //"\u4e2d\u6587" 这就让我们这些
因为我不能使用 JSON_UNESCAPED_UNICODE 因为我的 php 是 array ( 'id' => 26629, 'content' => 'преди 5 сек'
我正在从数据库中选择一些数据并将它们编码为 json,但我遇到了像 这样的捷克符号的问题 á,í,ř,č,ž... 我的文件是 utf-8 编码,我的数据库也是 utf-8 编码,我也将 header
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
当您有一个数组字段并将其保存在数据库中时,它会对数组执行漂亮的 json_encode 但没有 JSON_UNESCAPED_UNICODE 选项。数据最终是这样的: {"zh":"\u039d\u0
我是一名优秀的程序员,十分优秀!