转换为JSON时PHP数组中的字符问题

时间:2013-10-23 13:48:30

标签: php json

我在数据库中有各种各样的数据,包括字符串,整数和数据。特殊字符。我需要将其转换为JSON输出,我可以使用json_encode

但是,在验证此JSON时,它会失败,因为某些数据包含双引号,括号等内容,会破坏它,例如:

"description":"Allow support for "trends" and other processes"

围绕趋势的双引号打破了它。

无论如何我可以在编码之前预先准备好数组中的数据吗?我没有能力编辑数据,因此需要在SQL查询之后完成收集数据。

我按照以下方式进行:

    $data = array();    
    while($row = mysql_fetch_array($execute))
        {
            $data[] = array(
                "description" => $row["Descrption"],
            );
        }

然后:

print json_encode($data);

谢谢!

编辑:

的var_dump:

["description"]=> string(79) "Allow support for "trends" and other processes"

3 个答案:

答案 0 :(得分:1)

json_encode应该可以解决这个问题,但前提是你的PHP版本大于5.2。或者,在执行之前尝试转义所有json关键字。

function escapeJsonString($value) {
    $escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c");
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b");
    $result = str_replace($escapers, $replacements, $value);
    return $result;
}

答案 1 :(得分:1)

你确定这是你从json_encode收到的确切JSON输出,因为这不应该发生。一个常见的错误是直接从浏览器窗口中的页面查找JSON输出,其中可能已经发生了某种类型的解析。我猜测,因此,HTML实体可能会在这里发挥作用。在这种情况下,请尝试查找页面的来源(在大多数浏览器中为CTRL + U),这样可以更准确地查看您收到的内容。
未来的提示:尝试通过JSON查看器请求输出(我通常使用jsonviewer.stack.hu),它可以让您更好地了解您正在处理的内容,并且可能出现的问题很少

答案 2 :(得分:0)

您是否尝试过应用简单的字符替换?像这样:

$data[] = array(
    "description" => replace ($row["Description"], '"', '\\"'),
);

如果双引号是干扰的,那应该可以解决问题......