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%。

+0

好的json编码不会把'-'或'%'视为任何特殊的东西;那么当它试图使用返回的json时会怎样? –

+0

我所知道的是,如果我包含那个字段,整个事情就会消亡。如果我删除 - 并且%一切正常。没有返回数据。 –

首先,尝试对数据进行编码成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(); 
  1. 如果上面第一行不输出的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

  2. 如果第一行仍然无法正常输出,那么第二行将允许您查看PHP JSON编码器中发生的确切错误。