当前位置: 首页 > 知识库问答 >
问题:

PHP-json_编码(字符串,json_UNESCAPED_UNICODE)不转义捷克字符

上官飞
2023-03-14

我从数据库中选择一些数据,并将其编码为json,但我对捷克标志有问题,例如

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

我的文件是utf-8编码的,我的数据库也是utf-8编码的,我已经将头设置为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:“包”:“zv???tkanalouce”

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

共有1个答案

司空实
2023-03-14

根据示例中的代码,输出为:

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

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

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

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

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

最简单的是,您只需告诉每个数据库链接您要求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。它取自手册,也可以参考我们网站上的相关资料,例如utf 8-PHP和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字符串,包括了PHP 编码JSON字符串的使用技巧和注意事项,需要的朋友参考一下 示例 该json_encode函数会将一个PHP数组(或者,从PHP 5.4开始,一个实现该JsonSerializable接口的对象)转换为JSON编码的字符串。如果成功,则返回JSON编码的字符串;如果失败,则返回FALSE。 在编码期间,PHP数据类型string,intege

  • 问题内容: 我在使用PHP json_encode函数时遇到问题。它将数字编码为字符串,例如 变成 当js遇到这些值时,它将它们解释为字符串,并且对它们的数字运算失败。有谁知道某种防止将数字编码为字符串的方法?谢谢! 问题答案: 我做了一个非常快速的测试: 如果我没记错的话,这似乎就像你所描述的那样? 我得到的输出: 因此,在这种情况下,整数尚未转换为字符串。 不过,这可能取决于我们使用的PHP版

  • 我试图将一个json字符串解码到php数组中,当我使用json_last_error()时,我得到了一个语法错误(4)。 该字符串来自对Infusionsoft数据库的API调用。数据库返回一个具有一个键/值对的数组。该值包含json字符串。 当我将值保存到字符串变量并将其传递给json_decode()时,我会得到语法错误(它不起作用)。如果我传递整个json字符串本身(复制和粘贴从响应字符串v

  • 问题内容: 为了回答这个问题,我设法通过转义反斜杠来使字符串成为转义字符。 当我尝试将其概括为转义所有转义的字符时,它似乎无能为力: 但是对于特定的转义字符使用相同的方法,它确实起作用: 有一般的方法可以做到这一点吗?应包括,,,等。 问题答案: 使用r’text’将字符串定义为raw,如下面的代码所示:

  • 本文章将介绍Thymeleaf标准表达式语法中的概念。 学习如何在Thymeleaf模板中显示转义值。 已将HTML代码片段设置为上下文模型,并将其作为变量名为的字符串。在第一个div中显示HTML转义字符串,在第二个中显示未转义字符串。 如果要上机实践,请参考:Thymeleaf+SpringMVC5示例项目。这里不再重复创建项目的过程,这里将只介绍如何使用标准表达式和标签。 这里创建一个Mav

  • 问题内容: ’=?KOI8-R?B?W1JFUS0wMDI1NDEtNDc5NzddIO / h7yAi89TSz8rGwdLGz9IiIDs =?= \ r \ n \ t =?KOI8-R?B?Ry43MjkgKDEwKQ ==?=’ 如何将其转换为可读的内容?谢谢 ! 问题答案: email.header.decode_header(‘=?KOI8-R?B?W1JFUS0wMDI1NDEtN