【问题标题】:Weird characters (�) in JSON written by PHP to file由 PHP 写入文件的 JSON 中的奇怪字符 (�)
【发布时间】:2015-06-24 02:04:48
【问题描述】:

我有一个 PHP 代码,它在被调用时会写入一个 JSON 文件。该文件包含一些来自西班牙语和葡萄牙语的拉丁字符。直接浏览到其 URL 时,它在浏览器上正确显示,但在应用程序和开发者控制台中的响应预览选项卡下,这些字符被替换为字符 ...。

图片更好地说明情况: (点击图片打开大图)

该文件是用 PHP 编写的,代码如下:

file_put_contents('../data/cameras.json', $json, LOCK_EX);

我尝试了很多方法来修复这种编码,但都没有成功(其中一些甚至删除了字符,但这不是一个可接受的解决方案)。

关于如何解决这个问题的任何建议?

【问题讨论】:

  • $json 的制作效果如何?
  • 能否发布来自开发者控制台的响应头和PHP代码存储在服务器中的原始文件?
  • 正在从 Postgre 数据库(我不知道它的编码)中读取信息并由str_replace(array("\r", "\n"), "", (str_replace('"', "'", trim($string)))); 进行清理。该文件位于seventh.com.br/calculadora2-testing/data/cameras.json
  • 那么,您是在使用json_encode,还是手动将 JSON 拼凑在一起?
  • 1) 使用 UTF-8 建立与数据库的连接,2) 将数据结构创建为 PHP 数组,3) 使用 json_encode 输出到 JSON。然后您的编码问题将得到解决。目前您的 JSON 可能无效,因为它不是 UTF-8 编码的。

标签: javascript php json encoding utf-8


【解决方案1】:

我已经下载了 json 文件,当在 notepad++ 中以ANSI 模式查看它时,它看起来很好。所以我猜这个文件是WINDOWS-1252 编码。
我猜你想在你用 PHP 编写的文件中使用UTF8。

在写入文件之前尝试转换字符串的编码:

$json = mb_convert_encoding($json, "UTF-8", "WINDOWS-1252");

file_put_contents('../data/cameras.json', $json, LOCK_EX);

【讨论】:

  • 这行得通。出于某种原因,直接浏览文件会显示错误的字符,但在应用程序和响应选项卡中,它看起来很好。我知道某些配置不正确(因为浏览也应该正确显示内容),但这是以后的问题,应用程序正在运行。谢谢。
【解决方案2】:

最常见的问题是您的 .json 文件没有保存为 UTF-8。用记事本打开文件,并将其保存为 UTF-8。还要确保您的 PHP 文件是 UTF-8。

【讨论】:

  • 这是不可行的,该文件不时自动生成(如问题所述)。我不能等待它生成,然后每次手动重新转换它。
  • 下次应该多注意这个问题,我发完答案才知道文件生成了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
相关资源
最近更新 更多