【问题标题】:PHP Json_encode - No json data on specific column MySQLPHP Json_encode - 特定列 MySQL 上没有 json 数据
【发布时间】:2014-12-21 22:06:22
【问题描述】:

我正在尝试使用 mysql DB 为 iPhone 制作一个简单的 journalview 应用程序。 我正在使用 php 连接到数据库并将数据编码为 json。 我正在使用一个非常简单的 3 列数据库:

  • 身份证
  • 主题
  • 留言

当我从表中选择 id 和 subject 时,JSON 数据显示正确。 当我选择所有内容或单独选择消息时,我只看到一个白屏。 消息列是文本数据类型,应该可以有奇怪的符号(/、\、¨、$、%、空格、行、...) 我可以让消息数据显示的唯一方法是在我的连接文件中执行以下操作:

while($r = mysql_fetch_assoc($resultset))
        {

        //$r = preg_replace("!\r?\n!", " ",$r);
        $r= json_encode($r);

            $records[] = $r;

        }

        //Output the data as JSON

        echo json_encode($records);
    }


}

但是,返回的数据充满了反斜杠、\r、\n,看起来不像是有效的json:

[{"id":"248","subject":"General","message":"Dear Diary\r\n\r\nThis is a test.\r\nDoes it work       or not?!\r\n\r\nGoodbye.\r\n\r\n\r\nD"},{"id":"249","subject":"General","message":"Hi\r\n\r\nThis is Test number 2.\r\nDoes it Work?\r\n\r\n\/\/ goodbye \\\\"}]

如果我清空我的消息列并输入没有特殊符号的普通文本,它可以正常工作,所以我猜这就是问题所在。 但是,如果消息可以包含特殊字符和反斜杠,我会更好,这可能吗?

【问题讨论】:

  • 提供导致问题的确切数据。 json_encode 考虑到它需要的一切。
  • 嗨 zerkms 我已经编辑了我的帖子并添加了我的 json 输出,只有 2 行,但它们都引起了问题。
  • "\r, \n 并且看起来不像是有效的 json" --- 是什么让你这么想?
  • @zerkms 你说得对,我用 json 验证器验证它是正确的。

标签: php mysql json


【解决方案1】:

\n 和 \r 是有效的,它们很好。它们是隐藏的章程,它们也以这种方式存储在您的数据库中,因此您有 2 个选项。使用以下函数清理数据库或清理项目,然后再将其放入 json。

function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.

   return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
}

如果你想保留特殊字符转义它们 Parsing JSON containing new line characters

【讨论】:

  • 感谢您的回复 clonerworks 是有道理的。
  • ë、~、ä 等字符怎么样?每当从数据库加载它们时, json_encode 都会返回一个白页。我尝试设置 mysql_set_charset('utf8');就在 mysql_connect 之后
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 2018-05-21
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多