PHP UTF-8编码回显问号问题

3
我将尝试使用以下代码输出带有Unicode字符的json_response:
function utf8ize($d) {
if (is_array($d)) {
    foreach ($d as $k => $v) {
        $d[$k] = utf8ize($v);
    }
} else if (is_string ($d)) {
    return utf8_encode($d);
}
return $d;
}

用法如下:

echo json_encode(utf8ize($response));

这样做的问题在于,有些字符被正确编码,而其他字符(如ćś)则被发送为问号,如下图所示:

enter image description here

我不确定该如何修复这个问题。

这些字符串使用哪种字符编码? - tkausl
2
那么你期望 utf8_encode 做什么呢?如果它们已经是 UTF-8 格式,使用 utf8_encode 将会破坏它们。文档 - tkausl
我添加了这个,因为没有它,我的php脚本不想输出任何东西,我遵循了这里的建议https://dev59.com/s2Ik5IYBdhLWcg3wWc7T之后,它开始返回所示的输出。 - Alk
@tkausl 我正在使用 mysqli_connect 而不是 PDO。 - Alk
阅读此内容:https://dev59.com/13VC5IYBdhLWcg3wfhGL - Charlotte Dunois
显示剩余3条评论
2个回答

2

1

你可以尝试执行

SET NAMES utf8

作为查询。在建立连接后,只需要设置此标头,以防万一。
header('Content-type: text/plain; charset=utf-8');

然后再试一次。

SET NAMES utf8 将输出更改为:"Warto\u0139\u009b\u00c4\u0087 wyra\u0139\u017aenia 5 - 2 \u00c2\u02c7 4 jest r\u0102\u0142wna,但对我来说仍然无法正确显示。 - Alk
没关系,我删除了 utf8_encode 后它正常工作了。谢谢。 - Alk
不确定你是否有任何HTML,但在这种情况下,请使用类似于 header('Content-type: text/html; charset=utf-8'); 的头部。 - Robin Knaapen
不是的,这是一个由Java移动应用程序调用的PHP脚本,没有涉及HTML。 - Alk
1
好的,但是想要确认一下。哈哈 - Robin Knaapen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接