UTF-8 中的值在 JSON 中被编码为 NULL

2024-02-11

我有一组关键字通过 JSON 从数据库(编码的 UTF-8)传递,其中一些可能具有特殊字符,如 é、è、ç 等。这用作自动完成器的一部分。例子:

array('Coffee', 'Cappuccino', 'Café');

我应该补充一点,来自数据库的数组将是:

array('Coffee', 'Cappuccino', 'Café');

但 JSON 编码为:

["coffee", "cappuccino", null];

如果我通过 print_r() 打印这些内容,它们在 UTF-8 编码的网页上显示得很好,但如果我想使用 print_r($array) 查看数组,如果使用 text/plain,café 会显示为“café” ;出口();。

如果我在编码为 JSON 之前使用 utf8_encode() 进行编码,则效果很好,但网页上打印的内容是“café”而不是“café”。

同样奇怪的是, json_last_error() 被视为未定义的函数,但 json_decode() 和 json_encode() 工作正常。

关于如何从数据库获取 UTF-8 编码数据并在整个过程中表现相同的任何想法?

EIDT:这是获取关键字并将它们放入单个数组的 PHP 函数:

private function get_keywords() 
{
    global $db, $json;

    $output = array();

    $db->query("SELECT keywords FROM listings");

    while ($r = $db->get_array())
    {
        $split = explode(",", $r['keywords']);

        foreach ($split as $s)
        {
            $s = trim($s);
            if ($s != "" && !in_array($s, $output)) $output[] = strtolower($s);
        }
    }

    $json->echo_json($output);
}

json::echo_json 方法只是编码、设置标头并打印它(用于 Prototype)

编辑:数据库连接方法:

function connect()
{

    if ($this->set['sql_connect'])
    {
        $this->connection = @mysql_connect( $this->set['sql_host'], $this->set['sql_user'], $this->set['sql_pass'])
                OR $this->debug( "Connection Error", mysql_errno() .": ". mysql_error());
        $this->db = @mysql_select_db( $this->set['sql_name'], $this->connection)
                OR $this->debug( "Database Error", "Cannot Select Database '". $this->set['sql_name'] ."'");

        $this->is_connected = TRUE;
    }

    return TRUE;
}

更多更新: 我运行的简单 PHP 脚本:

echo json_encode( array("Café") ); // ["Caf\u00e9"]
echo json_encode( array("Café") ); // null

原因可能是当前客户端字符设置。一个简单的解决方案可能是设置客户端mysql_query('SET CHARACTER SET utf8')在运行之前SELECT query.

更新(2014 年 6 月)

自 PHP 5.5.0 起,不推荐使用 mysql 扩展。现在推荐使用mysqli。另外,进一步阅读后 - 应避免上述设置客户端集的方式出于安全等原因 http://www.php.net/manual/en/mysqlinfo.concepts.charset.php.

我还没有测试过,但这应该是一个不错的替代品:

$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
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());
}

或使用连接参数:

$conn = mysqli_connect("localhost", "my_user", "my_password", "my_db");
if (!mysqli_set_charset($conn, "utf8")) {
    # TODO - Error: Unable to set the character set
    exit;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTF-8 中的值在 JSON 中被编码为 NULL 的相关文章

随机推荐

  • 如何使用管道运行命令?

    我正在尝试使用 execvp 运行 ls wc 所以我创建了一个管道 然后创建了一个子管道 我关闭父 子中适当的 读 写 端 然后将另一端映射到标准输出 标准输入 然后我在父级中使用 execvp 运行 ls 在子级中使用 wc 当我运行程
  • Visual Studio Code 不使用池映射将调试器附加到 python 中的多进程

    你好 我正在尝试在 python 中调试多进程 下面是我使用 Pool 运行多进程的一部分 pool Pool num half logical cpus pool result dict pool starmap process batc
  • 将 NSArray 转换为 NSMutableArray Swift

    我正在尝试转换self assets NSArray to NSMutableArray并将其添加到picker selectedAssets这是一个NSMutableArray 这段代码在 swift 中会是什么样子 Objective
  • 如何强制用户下载图像(如下载 pdf)?

    因此 我编写了一个图像库 其中包含下载原始图像的选项 默认情况下 它显示图像的调整大小版本 我很想知道如何 下面的代码将强制用户保存 pdf 而不是使用浏览器查看它 我希望通过将单击操作与 jQuery 绑定来实现图像 jpg gif pn
  • Material-UI [v0.x] 悬停样式上的 RaisingButton

    我想更改悬停时 Material UI RaisingButton 的样式 但似乎没有特定的选项可以做到这一点 因为悬停时发生的情况是由材料设计指南定义的 然而 当鼠标悬停在按钮上时 有什么方法可以更改按钮的样式 主要是颜色和背景颜色 吗
  • C# 中 itextsharp 中的文本格式设置

    我正在尝试使用我的 C 软件创建 pdf 文件 我在用itextsharp库来创建客户账单收据 但是我无法格式化文本 我们如何格式化pdf文件中的文本 仅新行字符 n似乎正在工作 我们如何使用制表符格式化文本 附件是 pdf 文件中文本的屏
  • 如何在 Unity 中创建一个可以显示由许多小图像组成的纹理的着色器

    所以我想做的是从 SQL 表加载卫星图像并将它们包裹在一个球体周围以创建一个地球仪 我知道我已经加载了所涵盖的图像 我只是不确定如何使我的着色器以正确的方向显示图像 我去了 Unity 论坛并查看了这段代码 https docs unity
  • 从Python中的函数返回错误字符串

    我在 Python 中有一个类函数 它要么返回成功 要么返回失败 但如果失败 我希望它发回特定的错误字符串 我想到了 3 种方法 将变量 error msg 传递给最初设置为 None 的函数 如果出现错误 它将设置为错误字符串 例如 if
  • 如何使用 C# Windows 应用程序将图像从 byte[] 写入 MS WORD

    我尝试从以下位置写入数据FileStream StreamWriter到一个word文件 当数据是文本格式时它工作正常 使用StreamWriter 但是当我尝试同样的方法时Binarywriter 用于将图像写入Word文档 它错误地写入
  • 读取表变量的查询可以在 SQL Server 2008 中生成并行执行计划吗?

    首先 从BOL http msdn microsoft com en us library ms175010 aspx 修改的查询table变量不生成并行查询执行计划 当非常大时 性能可能会受到影响table变量或复杂查询中的表变量被修改
  • 使用 VM 参数导出 jar

    我已经使用 Eclipse 编写了一个 Java 应用程序 该应用程序使用 SWT 作为 UI 看运行 jar 时出现 SWT 异常 线程 main 中出现异常 org eclipse swt SWTException 线程访问无效 htt
  • 使用 Flask 时 PyCUDA 上下文错误

    我正在使用 PyCUDA 来实现 smooth local affine 如图所示here https github com LouieYang deep photo styletransfer tf blob master smooth
  • 如何声明一个字节数组包含非ascii字符而不在python 3中转义

    这是我用python2写的一个例子 usr bin env python coding utf 8 from future import print function import sys struct def pack s list re
  • 如何修改ActiveXObject JS构造函数?

    我需要包装一个 IE ajax 请求以在发生时通知我 即我需要知道何时调用 open var xhr new ActiveXObject Microsoft XMLHTTP 做到这一点的唯一方法 我认为 是实现 ActiveXObject
  • 多个 ajax 调用的 jQuery 回调

    我想在单击事件中进行三个 ajax 调用 每个 ajax 调用都会执行不同的操作并返回最终回调所需的数据 这些调用本身并不相互依赖 它们可以同时进行 但是我希望在所有三个调用完成后进行最终回调 button click function f
  • 使用 Stream 比较两个集合 - anyMatch

    我想比较 a 中是否有任何对象list2存在于一个list1 我可以迭代两个列表并使用比较所有元素 contains 但我想知道是否没有更有效的方法 我发现this https stackoverflow com questions 225
  • 在 oninvalid 消息中创建换行符

    我想在 oninvalid 弹出消息中创建换行符 以便我可以在不同行上列出错误消息的多个要求 这是我试图创建的示例代码
  • R networkD3:单击操作显示节点数据帧的信息

    我有这个代码 library networkD3 Load data data MisLinks data MisNodes new nodes lt MisNodes new nodes var1 lt runif nrow MisNod
  • Android:如何在 Android 应用程序中显示谷歌地图?

    我已经构建了一个应用程序 可以为我进行一些坐标计算 它工作得很好 它也从我构建的数据库中检索点 我现在想做的是当按下菜单按钮时显示地图 我做了一个教程 只是一个地图显示 这就是它运行时所做的一切 但是当我尝试将我所做的事情合并到我的应用程序
  • UTF-8 中的值在 JSON 中被编码为 NULL

    我有一组关键字通过 JSON 从数据库 编码的 UTF 8 传递 其中一些可能具有特殊字符 如 等 这用作自动完成器的一部分 例子 array Coffee Cappuccino Caf 我应该补充一点 来自数据库的数组将是 array C