我在数据库中有各种各样的数据,包括字符串,整数和数据。特殊字符。我需要将其转换为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"
答案 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"], '"', '\\"'),
);
如果双引号是干扰的,那应该可以解决问题......