微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么此对json_encode的PHP调用无声地失败-无法处理单引号?

如何解决为什么此对json_encode的PHP调用无声地失败-无法处理单引号?

您需要在执行查询之前设置连接编码。如何完成此操作取决于您用于连接的API:

当您从MysqL获取数据时,任何文本都将以“客户端编码”进行编码,如果您未进行其他配置,则可能是Windows-1252。导致问题的字符是“弯引号”,如92十六进制转储所示,它确认MysqL客户端正在Windows-1252中对文本进行编码。

您可能会考虑的另一件事是,将所有文本传递给utf8_encode,但是在这种情况下,它不会产生正确的结果。PHP utf8_encode转换 编码的文本。在此编码中,\ x92是不可打印的控制字符,它将在utf-8中转换为不可打印的控制字符。您可以使用str_replace("\x92", "'", $input)此特定字符来解决此问题,但是如果有可能数据库中将存在任何其他非ascii字符,您将希望客户端使用UTF-8。

解决方法

我有一个stdClass称为的对象$post,当通过进行转储时print_r(),返回以下内容:

stdClass Object (
    [ID] => 12981
    [post_title] => Alumnus' Dinner Coming Soon
    [post_parent] => 0
    [post_date] => 2012-01-31 12:00:51
)

从调用json_encode()此对象回显结果将导致以下结果:

{
    "ID": "12981","post_title": null,"post_parent": "0","post_date": "2012-01-31 12:00:51"
}

我假设单引号引起json_encode了某些问题,但是我不知道需要哪种格式才能转义。有任何想法吗?

编辑:修复了代码示例中的不匹配。我正在运行PHP版本5.3.8

EDIT2:在对对象进行编码后,我立即这样做:

echo json_last_error() == JSON_ERROR_UTF8;

此打印1,表示发生以下错误:“格式错误的UTF-8字符,可能编码错误”。json_last_error()

EDIT3:调用utf8_decode()该职位的标题将导致以下内容:“校友?晚饭快来了”。这些数据是从MySQL数据库中提取的-
帖子标题特别是一个文本字段,采用UTF-8编码。也许这个单引号的编码不正确?问题是,我有一个SQL GUI应用程序,它在其中正确显示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。