【问题标题】:Strange characters in PHP echo resulting in invalid JSONPHP回显中的奇怪字符导致无效的JSON
【发布时间】:2013-01-10 10:33:24
【问题描述】:

我在 php 中使用 echo 来返回数据库请求。尝试在 Flash 中解码结果时,我收到错误消息,告诉我意外字符。当我在浏览器中查看输出时,它看起来很好。但是当我复制内容(全选 -> 复制)然后通过 php 中的脚本运行文本时,我看到了很多奇怪的字符。这就解释了为什么 JSON 解码失败,但是我该如何摆脱奇怪的字符呢?

检查字符串的测试脚本

    $string = str_split($string);
    echo '<pre>';
    print_r($string);
    echo '<pre>';

结果:

    [0] => ï
        [1] => »
        [2] => ¿
        [3] => ï
        [4] => »
        [5] => ¿
        [6] => ï
        [7] => »
        [8] => ¿
...

【问题讨论】:

  •  是 Byte order mark,由文本编辑器设置,以提示其他编辑器该文本使用 UTF-8 编码而不是 ASCII、ISO-8859-1 等。你到底是怎么做到的?复制后通过脚本运行文本”?请您具体说明您执行操作的顺序,因为我认为这就是问题所在。
  • 我在浏览器中复制了输出并将其粘贴到我的测试 php 文件中的变量 ($string) 中。这些字符不是视觉的,但是当我尝试在编辑器中逐步浏览这些字符时,我得到了他们在那里的提示。运行脚本后(在我的问题中显示)我可以看到字符。
  • 在你的第一步(你使用echo返回数据库请求)你能不能用file_put_contents('out.txt', $output);之类的东西把你发送到浏览器的确切输出写到一个文件中,上传它某处并在这里放一个链接?通过从您的浏览器复制它并将其插入到您的 PHP-Editor-Of-Choice 中,文本可能已被转换、前缀(带有 BOM)等,因此不能用作查找问题根本原因的基础.

标签: php json character


【解决方案1】:

确保服务器使用正确的内容类型标头进行回复:

Content-type: application/json; charset=utf-8

【讨论】:

    【解决方案2】:

    我在阅读this answer 后找到了解决方案。问题是我的 PHP 文件是用带有 BOM 的 UTF-8 编码保存的。使用 UTF-8 编码保存文件解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-04
      • 2013-10-29
      • 1970-01-01
      • 2010-09-05
      • 2018-01-24
      • 2010-11-25
      • 2014-09-13
      • 1970-01-01
      相关资源
      最近更新 更多