【问题标题】:PHP UTF-8 encoding echoes question marksPHP UTF-8 编码回显问号
【发布时间】:2017-01-11 17:40:09
【问题描述】:

我正在尝试使用以下代码回显带有 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));

问题在于某些字符被正确编码,而其他字符(如ćś)作为问号发送,如下图所示:

我不知道如何解决这个问题。

【问题讨论】:

  • 字符串在哪种字符编码中?
  • 它们取自我在utf8_polish_ci中的数据库
  • 那你希望utf8_encode 做什么?如果它们已经在 UTF-8 中,utf8_encode 只会销毁它们。 Docs
  • 我补充说,因为没有它,我的 php 脚本不想回显任何内容,我遵循了这里的建议 stackoverflow.com/questions/19361282/…,之后它开始返回显示的输出
  • 我建议您改用 fayd 的回答(获得 8 票赞成的回答)。

标签: php json utf-8 echo special-characters


【解决方案1】:

根据http://php.net/manual/en/function.utf8-encode.php utf8_encode 将数据从 ISO-8859-1 编码为 UTF-8。

但是,波兰语 lang 具有 iso-8859-2 字符集,因此您应该使用

iconv('iso-8859-2', 'utf-8', $d) 而不是utf8_encode($d)

【讨论】:

    【解决方案2】:

    你可以尝试执行

    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 这对我来说仍然无法正确显示
    • 没关系,在我删除 utf8_encode 后它工作正常。谢谢
    • 不确定你是否有任何html,但在这种情况下使用像header('Content-type: text/html; charset=utf-8');这样的标题
    • 不,这是一个由 Java 移动应用程序调用的 PHP 脚本,没有 HTML 代码
    • 好的,但想确定一下。哈哈
    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 2010-11-26
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多