现在经常使用Ajax调用后台php获取后台数据,但是PHP返回的数据如果含有中文的话,Ajax会无法识别,那咋整呢,我用的是比较笨的方法,但是实用:
方法一:
echo urldecode(json_encode(array('status'=>'1', 'errMsg'=>urlencode('数据传递错误,请重试')))); return;
上面是之前遇到时候的解决办法,但是我又遇到了一次,用上面的办法不管用,用网上各种办法也是不行,最后琢磨出第二种方法(这种方法可能只适用于这一种情况,但其他方法调不出来可以试一下这一种),
方法二:
//show_as_table是拼接HTML代码的方法 $tableHtml = $this->show_as_table($data); $tableHtml = iconv('GBK', 'UTF-8', $tableHtml); echo json_encode(array("success"=>true, "data"=>$tableHtml));die;
方法三:用下面的两种方式进行url转码
方式一:
public function ch_json_encode($data) { function ch_urlencode($data) { if (is_array($data) || is_object($data)) { foreach ($data as $k => $v) { if (is_scalar($v)) { if (is_array($data)) { $data[$k] = urlencode($v); } else if (is_object($data)) { $data->$k = urlencode($v); } } else if (is_array($data)) { $data[$k] = ch_urlencode($v); //递归调用该函数 } else if (is_object($data)) { $data->$k = ch_urlencode($v); } } } return $data; } $ret = ch_urlencode($data); $ret = json_encode($ret); return urldecode($ret); }
方式二:其实是方式一的不同写法
public function arrayRecursive(&$array, $function='urlencode', $apply_to_keys_also = false){ foreach ($array as $key => $value) { if (is_array($value)) { $this->arrayRecursive($array[$key], $function, $apply_to_keys_also); }else{ $array[$key] = $function($value); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key){ $array[$new_key] = $array[$key]; unset($array[$key]); } } } } public function JSON($array){ $this->arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); }
大家可以参考一下!