【问题标题】:Array to JSON encoding odd behaviour with hebrew characters数组到 JSON 编码带有希伯来字符的奇怪行为
【发布时间】:2016-07-07 20:08:34
【问题描述】:

所以故事是这样的,我正在尝试将 JSON 字符串保存到我的数据库中,但每个希伯来字母都在转换为例如“\u05d4”,这应该是希伯来语 (ה) 中的字母“He”。

英文编码正确

我进行了研究,发现这种编码是 JAVA 或 C/C++ 字符编码,但我找不到一种方法将其作为常规 UTF-8 字符存储在我的数据库中以方便编辑...

获取数据并将其显示在我的页面上效果很好(在希伯来语中,应该如此),但无论我尝试使用什么函数解决问题,我的数据库中的数据都会被编码...

示例:

\u05d0\u05d9\u05e4\u05d4 \u05ea\u05e8\u05e6\u05d4 \u05e9\u05d4\u05e9\u05dd \u05d9\u05de\u05d5\u05e7\u05dd?

应该是:

איפה תרצה שהשם ימוקם?

如您所见,编码也占用了很多额外的空间,并且无法从 phpMyAdmin 进行编辑...

我保存数据的函数:

mysql_real_escape_string(json_encode($pinfo))

而 $pinfo 包含数组中的所有数据(以 utf-8 编码)

这是 JSON_ENCODE() 的问题还是我还不知道的其他问题?

编辑

使用 Álvaro González 和 Tanuel Mategi 提供的信息,我找到了我想要的解决方案: mysql_real_escape_string(json_encode($pinfo, JSON_UNESCAPED_UNICODE))

希望对你有帮助!

【问题讨论】:

  • 你用的是mysql还是mysqli?请分享完整代码。
  • 你能解释一下为什么你在那里使用 json_encode() 吗?
  • 这是正确的行为。您的希伯来语字符正在转义为 unicode 块。 en.wikipedia.org/wiki/Unicode_block。如果你使用json_decode(),它们应该被再次解码。
  • 我正在使用 mysqli,并且代码很长而且并不真正相关......我正在使用 JSON_ENCODE 将许多变量数据作为文本保存到数据库中,所以我不需要创建我的数据库中有数百列。我能够使用您的帮助找到解决方案,并使用上面的解决方案进行编辑!谢谢!

标签: php mysql json encoding utf-8


【解决方案1】:

\u05d4 是 JSON 中完全有效的转义序列。它对应于U+05d4 Unicode character(希伯来字母 He)。您的 JSON 输出显然没有任何问题 — 我认为您只是误读了 format documentation

【讨论】:

  • 非常感谢您的回答!使用您提供的信息,我找到了解决问题的方法:mres(json_encode($pinfo, JSON_UNESCAPED_UNICODE))
  • 我会说你一开始就没有问题...... :)
  • 正确,给我的不便说个解决办法!
【解决方案2】:

我使用json_encode($x),没有第二个参数。和json_decode($y, TRUE)。考虑一下这种组合。

如果mres 是指mysql_real_escape_string(),请始终使用转义函数。

但是不要使用mysql_*;切换到PDOmysqli_*

【讨论】:

    【解决方案3】:

    结果没有问题,当你再次解码时,你会得到你想要的结果..

    【讨论】:

    • 感谢您的回答,但我写道我需要常规(未编码)文本以便在 PhpMyAdmin 上进行编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多