PHP在JSON数组中传回带有特殊字符的对象
问题描述:
所有的,我有一个运行MYSQL查询并将结果放入数组的php文件。该表有几个字段,其中一个字符' - '和'%'作为varchar字符串的一部分。当我将它传回JSON数组时,它会死亡。以下是代码段..PHP在JSON数组中传回带有特殊字符的对象
PHP文件
// fetch merit guidelines
$meritGuideline = array();
$sql = "SELECT smg.id, year, ea.rating, ratioUpper, ratioLower, guideline, guidelineNum FROM spot_merit_guide smg JOIN epm_annual ea ON ea.id = smg.rating WHERE year = '$spotYear'";
$query = mysqli_query($con, $sql);
while ($row = mysqli_fetch_assoc($query)) {
$meritGuideline[] = $row;
}
mysqli_free_result($query);
然后我这个
echo json_encode(array('meritGuideline' => $meritGuideline));
MySQL表现场指导方针包含字符串0返回它 - 4%。
答
首先,尝试对数据进行编码成UTF-8:
// fetch merit guidelines
$meritGuideline = array();
$sql = "SELECT smg.id, year, ea.rating, ratioUpper, ratioLower, guideline, guidelineNum FROM spot_merit_guide smg JOIN epm_annual ea ON ea.id = smg.rating WHERE year = '$spotYear'";
$query = mysqli_query($con, $sql);
while ($row = mysqli_fetch_assoc($query)) {
$meritGuideline[] = utf8_encode($row); // ENCODE TO UTF-8
}
mysqli_free_result($query);
然后进行调试运行此:
echo json_encode(array('meritGuideline' => $meritGuideline));
echo 'Error: ' . json_last_error_msg();
-
如果上面第一行不输出的JSON然后,该问题很可能是隐藏的UTF-8唯一的特殊/不可见空间字符,在处理JSON编码或甚至在浏览器中解析Javascript代码时,这些字符通常很淘气。下面是这些“特殊”的空格字符的一些例子:
无间断空间:http://www.fileformat.info/info/unicode/char/00a0/index.htm
零宽度空间:http://www.fileformat.info/info/unicode/char/200b/index.htm
如果第一行仍然无法正常输出,那么第二行将允许您查看PHP JSON编码器中发生的确切错误。
好的json编码不会把'-'或'%'视为任何特殊的东西;那么当它试图使用返回的json时会怎样? –
我所知道的是,如果我包含那个字段,整个事情就会消亡。如果我删除 - 并且%一切正常。没有返回数据。 –