【问题标题】:PHP json_encode is not workingPHP json_encode 不工作
【发布时间】:2016-02-02 01:20:12
【问题描述】:

我有一个 users 表,其中 Collat​​ion as utf8_general_ci。具有姓名、年龄、电话和电子邮件等字段。

名称字段的某些行似乎有一些尾随空格。如果回显echo "selectedUser " . $selectedUser->name;它正在打印带有空格的名称,我只是从 DB 字段中复制了名称并将其粘贴到一个 php 文件中,并回显了该文本,它的打印就像

selectedUser "Rohan Harish Reddy\u00a0\u00a0"

name 字段仅包含字段尾随空格,我不确定

为什么会这样打印?为什么它不适用于 json_encode ? 如何使用 json_encode 转换这个 user 对象?

代码:

$users = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach ($users as $user) { 

    $selectedUser = $user;

    echo "selectedUser " . json_encode($selectedUser);

}

如果在 fetch all 语句上方添加以下代码,它工作正常。

$this-> adminConn ->query("SET NAMES utf8");
$stmt = $this-> adminConn ->query($sql);

我需要为每个查询设置“SET NAMES utf8”吗?有没有共同点 实现它的方法?

【问题讨论】:

    标签: php json


    【解决方案1】:

    因为您没有空格 (Unicode 0x0020),所以您有不间断的空格 (Unicode 0x00A0)。 JSON 标准 (RFC 7159) 声明所有 Unicode 字符都可以转义,json_encode 正在使用它来转义不间断的空格(我假设是为了将它们与普通空格区分开来)。解决方案可能是找出为什么您的数据中有尾随不间断空格。

    【讨论】:

    • 当我们上传 csv 文件时,它正在发生。 Unicode 0x00A0 被插入。在解析上传的文件并在 json_encode 上避免它时有什么方法可以避免它??
    • 我不知道你的 CSV 是什么样的,或者你如何解析它,或者你如何清理(或不清理)你的值。在 json_encode 上避免它很简单,只需将所有 nbsps 替换为常规空格,或者在 json_encode 之前使用 preg_replace 彻底删除它们。
    • 如果名称有任何不间断的空格,由于这个不间断的空格,该特定对象不会打印 json_encode($selectedUser)。
    • 我不想替换那些不间断的空格,无论数据库字段上可用的什么内容都需要返回。如果在 fetch all 语句上方添加以下代码,它工作正常。 $this-> adminConn ->query("SET NAMES utf8"); $stmt = $this-> adminConn ->query($sql);我需要为每个查询设置“SET NAMES utf8”吗?有没有通用的方法来实现它?
    • 如果您需要数据库中确切内容的 JSON 表示,那么您有正确的值 - "Rohan Harish Reddy\u00a0\u00a0" 是具有两个尾随 nbsps 的字符串的有效 JSON。我想我不明白你的问题。 (您也可以通读answers here 以了解为什么SET NAMES utf8 通常不是一个好主意。)
    猜你喜欢
    • 2017-06-17
    • 2018-06-10
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2015-01-19
    • 2011-09-04
    相关资源
    最近更新 更多