【发布时间】:2018-01-30 15:14:09
【问题描述】:
我遇到了数据库中 UTF-8 字符编码失败的问题。
当我用 php 和json_encode() 读取它时,json_encode($content) 失败并返回一个空字符串。
$test = array('meep' => base64_decode('7b6Y'));
echo json_encode($test)."\n";
if(json_last_error() == JSON_ERROR_UTF8) {
echo "fail\n";
}
告诉我为什么这不会打印任何其他内容然后“失败”。或者更好的是,输入内容是什么。
- 有没有一种方法可以检测 JSON_ERROR_UTF8 而无需调用 json_encode。像 json_test 还是别的什么?
- 您知道修复拼写错误的 utf-8 字符串的方法吗?回到 hex 解决问题并回到 utf-8 或其他什么?
在这种情况下,用目标更好地存储字符串的答案是没有用的!
【问题讨论】:
-
如果要检查字符串在特定编码中是否有效,请使用
mb_check_encoding。 -
您永远不必猜测任何特定字符串的编码方式。为什么您不知道来自数据库的内容是否为 UTF-8?您可以通过在连接到数据库时设置连接编码来控制它。
-
在任意字符串上使用
utf8_encode不会修复它们,它只是确保你有一些在 UTF-8 编码中有效的东西,但它可能会也可能不会完全是垃圾。 -
对我有用,并且在循环中看起来更好......问题是在 utf8mb4 mysql 字段中写入了错误的 unicode 序列。这可能会再次发生,并且在这种情况下使用 js 和 json 异步重新加载会失败。当然,字段编码永远是 utf-8,但写入的值不能包含错误的 unicode 序列。这可以通过带有代理对和组合封闭键帽的表情符号序列来实现。在未来的网络应用程序不应该期望这一点。
-
P.S. utf8_encode($content);只是一个易于阅读的示例。之后 json_encode 工作,但其他字符明显失败。
标签: php json encoding utf-8 character-encoding