/** * postDispatch * * @return void */ public function postDispatch() { if (array_key_exists($act = strtolower($this->getRequest()->getActionName()), static::$_limitedActions)) { // 导出CSV格式报表 if (($ext = strtolower($this->input('ct'))) === 'csv') { // 数据格式以Windows下使用为准 // 参考 http://msdn.microsoft.com/zh-cn/library/ms155919%28v=SQL.100%29.aspx $data = $this->view->render("master/stat/{$act}.{$ext}"); $data = str_replace("\n", "\r\n", preg_replace('/\\s*\\n{2,}\\s*/', "\n", str_replace("\r", "\n", $data))); $data = preg_replace('/(\\s*,)\\s*\\r\\n\\s*/', '\\1', $data); // 需要保证在Excel中打开不出现乱码,编码为 CP936 $data = mb_convert_encoding($data, 'CP936', 'UTF-8'); // 报表数据时间范围 $date = isset($this->view->tmln) && is_array($this->view->tmln) ? date('Y-m-d', $this->view->tmln[0]) . '至' . date('Y-m-d', $this->view->tmln[1]) : (isset($this->view->date) && Zyon_Util::isDate($this->view->date) ? $this->view->date : ''); $name = static::$_limitedActions[$act] . $date . '.' . $ext; $this->force($data, $name, 'text/csv; charset=CP936'); } } parent::postDispatch(); }