【问题标题】:JSON output accents issueJSON输出重音问题
【发布时间】:2026-01-11 19:00:01
【问题描述】:

我已经搜索了大约 3 个小时,我知道有很多类似这样的问题已经被问过,但是我在尝试输出时没有找到任何适合我的解决方案通过我的数据库上的 SELECT 查询结果的重音字符。

 $itemsList = array();
 while($row = mysql_fetch_assoc($res)){
    $itemsList[Items][] = ($row);
 }
 echo json_encode($itemsList);

这将输出:

{"Items":  [

{"user_name":"misterP", 

"comment":"\u00c3\u00a9t\u00c3\u00a9",

"image_name":"403885300736874.jpg"}]}

但我需要输出口音,像这样:

{"Items":  [

{"user_name":"misterP", 

"comment":"été",

"image_name":"403885300736874.jpg"}]}
  • 我的数据库和表有interclassement utf8_general_ci
  • 我的数据库中插入的数据是utf8_encoded
  • 我的 php 脚本是 Unicode (UTF-8)
  • 我在数据库上的 SELECT 之前做了“mysql_set_charset('utf8');”
  • 如果这可以帮助某人:在 y 数据库中,单词“été”是:“été”

所以我现在真的不知道该怎么办,我真的被口音困住了,我无法让它发挥作用。提前致谢 !

【问题讨论】:

  • 您可能想阅读此页面以查看您是否在编码方面遗漏了任何内容,并尝试在页面下方的 2/3 处进行测试:kunststube.net/frontback

标签: php mysql ios json utf-8


【解决方案1】:

这并不重要。 json解码后又变成字符了。

如果你使用php 5.4 >=,你可以将JSON_UNESCAPED_UNICODE传递给json_encode

json_encode( $data, JSON_UNESCAPED_UNICODE )

但同样,unicode 转义也同样有效,并使数据 ascii 安全。

编辑:

看起来你的数据已经被搞砸了,甚至在json_encode 之前。您似乎已将其“双重编码”为 utf-8。

我的数据库中插入的数据是utf8_encoded

您使用的是utf8_encode 之类的东西吗?当您插入数据库时​​,您不需要在代码中做任何事情。如果您使用utf8_encode 在数据库中插入数据,那么这就解释了双重编码。您所需要的只是数据为 utf-8 并且在插入之前具有 mysql_set_charset( 'utf8' )


有趣的是,如果您的 json 包含未转义的 unicode,则 json cannot be executed as javascript 即使您添加括号,如果 json 包含 U+2028U+2029

【讨论】:

  • 不幸的是我使用的是 php 5.3.18 这个版本有解决方法吗?
  • @Seb83 json 根本不是你的问题,问题在于你如何将数据插入数据库。查看我的编辑
  • 所以真正的解决办法是更正数据库中不正确的数据。任何导致数据输入错误的代码也需要修复。
  • 感谢您的回答,我会尽快更改插入数据的方式 :) 是的,我正在使用 utf8_encode。实际上,这就是我所做的:
  • @Seb83 你的 php 源文件的物理编码是什么?这取决于您的文本编辑器和平台,如果您在 Windows 上,则很可能不是 utf-8,除非您已经自己配置了它。您是否还在某处设置了http标头header("Content-Type: text/html; charset=utf-8")