現在經常使用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); }
大家可以參考一下!