【问题标题】:Return JSON NULL返回 JSON NULL
【发布时间】:2017-07-20 18:40:17
【问题描述】:

我遇到了数据编码问题。我的数据库在其中一列中有重音,在 api 中,在 php 中的 PDO 查询 SQL SERVER 中返回该列。我一返回就通过 json_encode 方法转换为 JSON,再加上 JSON 为 NULL。当我给 var_dump 带有重音符号的问题字母时,这会出现“�”并且在 json 中为空。 我知道这是我需要转换为 UTF8 的编码,但我无法在 php 中进行这种转换。谁能帮帮我?

【问题讨论】:

  • 尝试utf_encode() 并检查。你能告诉我那里的原始字符是什么吗?
  • SelecionaMensagem($codigo); //var_dump($mensagens); echo json_encode($mensagens, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); } catch (Exception $e) { var_dump($e->getMessage()); }
  • 返回的是数组里面的数组
  • 1) 从 what 编码转换?这就像试图将 9.95 转换为美元一样,如果您不知道源货币是没有意义的。 2)如果数据在序列化为 JSON 之前已经损坏,那么在损坏后修复它是没有意义的。您应该返回设计表并确保您的基本数据库连接配置正确。

标签: php html sql-server json pdo


【解决方案1】:

您是否指定了正确字符集的标题?

header('Content-type: text/html; charset=utf-8');

另请注意,您的列和表应为utf8_unicode_ci

最后你与数据库的连接也应该相应地设置charset=utf8

【讨论】:

  • 谁在发布我的答案后不到 1 秒就对我投了反对票:非常感谢。
  • 不客气。这个问题与 Content-type: text/html 无关。 mysql也不行。
  • @YourCommonSense 而您在不到 1 秒的时间内就看到了这一切。酷。
  • 请避免在 cmets 中进行离题讨论
  • @YourCommonSense 老板,随便你说什么。
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2015-01-21
  • 2015-11-27
  • 2017-03-12
  • 2016-04-09
  • 2014-10-10
相关资源
最近更新 更多