function arrayUrlEncode(&$data, $toReplace = array(), $toClear = array()) { if (is_array($data) && count($data)) { foreach ($data as $k => &$v) { if (is_array($v)) { arrayUrlEncode($v, $toReplace, $toClear); } elseif ($v) { if (is_numeric($v) && $v < 1 && $v > 0 && $v[0] != '0') { $v = '0' . $v; } if (is_int($v) || is_float($v)) { } elseif (isset($v)) { is_array($toReplace) && ($v = strtr($v, $toReplace)); 11 != strlen($v) && is_array($toClear) && ($v = preg_replace($toClear, '', $v)); if (is_string($v)) { $v = urlencode($v); } } } } } return true; }
/** * Ajax方式返回数据到客户端 * @access protected * @param mixed $data 要返回的数据 * @param String $type AJAX返回数据格式 * @param int $json_option 传递给json_encode的option参数 * @return void */ protected function ajaxReturn($data, $type = '', $json_option = 0) { if (empty($type)) { $type = C('DEFAULT_AJAX_RETURN'); } // 2015.8.4 very80 // 兼容直接传入三种类型数据,以第2个参数为int进行识别,eg: $this->ajaxReturn('', 1, '登录失效'); if ($type && is_int($type)) { $data = ['data' => $data, 'code' => $type, 'msg' => $json_option]; $type = 'DATA'; $json_option = 0; } switch (strtoupper($type)) { case 'DATA': if (!is_array($data) || is_array($data) && !array_key_exists('data', $data)) { $data = ['data' => $data]; } array_key_exists('code', $data) || ($data['code'] = C('DEFAULT_AJAX_RETURN_STATUS')); array_key_exists('msg', $data) || ($data['msg'] = C('DEFAULT_AJAX_RETURN_MESSAGE')); arrayUrlEncode($data); // 返回JSON数据格式到客户端 包含状态信息 header('Content-Type:application/json; charset=utf-8'); exit(urldecode(json_encode($data, $json_option))); case 'JSON': // 返回JSON数据格式到客户端 包含状态信息 header('Content-Type:application/json; charset=utf-8'); exit(json_encode($data, $json_option)); case 'XML': // 返回xml格式数据 header('Content-Type:text/xml; charset=utf-8'); exit(xml_encode($data)); case 'JSONP': // 返回JSON数据格式到客户端 包含状态信息 header('Content-Type:application/json; charset=utf-8'); $handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER'); exit($handler . '(' . json_encode($data, $json_option) . ');'); case 'EVAL': // 返回可执行的js脚本 header('Content-Type:text/html; charset=utf-8'); exit($data); default: // 用于扩展其他返回格式数据 Hook::listen('ajax_return', $data); } }