2014-07-23 3 views
3

내 현재 CodeIgniter 프로젝트에 CSV 기능으로 다운로드가 있습니다. 사용자가 링크를 클릭하면 CSV로 파일을 다운로드합니다. 코드에 제공된 파일 이름에 물음표 문자가 있으면 다운로드 한 CSV 파일의 파일 이름이 올바르지 않습니다. 일을 분명히하기 위해 아래에 코드가 있습니다. 라인 header('Content-Disposition: attachment; filename="'.basename($name).'"');에서 Firefox 버전 CSV 파일 다운로드

public function download($role = NULL, $id = 0, $eid = 0) { 
     $this->load->helper('download'); 
     $list = $this->respondent->get_respondents($eid); 
     $questions = $this->respondent->get_all_questions($eid); 

     $fp = fopen('php://output', 'w'); 
     $fields = array(
      'Timestamp', 
      'First Name', 
      'Middle Name', 
      'Last Name', 
      ); 

     $fields = array_merge($fields, $questions); 

     fputcsv($fp, $fields); 

    foreach ($list as $respondent) { 
      $respondent_data = array(
      $respondent->since, 
      $respondent->first_name, 
      $respondent->middle_name, 
      $respondent->last_name, 
      ); 

      $query = $this->respondent->get_responses($respondent->rid); 

      foreach($query as $response) { 
      array_push($respondent_data, $response->answer, $response->duration); 
     } 

     fputcsv($fp, $respondent_data); 
    } 

    $data = file_get_contents('php://output'); 
    $name = $this->respondent->get_experiment($respondent->eid)->title.'.csv'; 

    // Build the headers to push out the file properly. 
    header('Pragma: public');  // required 
    header('Expires: 0');   // no cache 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Cache-Control: private',false); 
    header('Content-Disposition: attachment; filename="'.basename($name).'"'); 
    header('Content-Transfer-Encoding: binary'); 
    header('Connection: close'); 
    exit(); 

    force_download($name, $data); 
    fclose($fp); 
    } 

$name는 올바르게 해석 할 수없는 파이어 폭스 나 크롬 브라우저에서 파일을 다운로드 물음표 문자를 가지고 한 번. 물음표 문자 대신 생성 된 문자는 각각 밑줄 또는 하이픈입니다. 그러나 Safari를 사용하여 다운로드 할 때 파일 이름은 정상적으로 작동합니다. 코드 또는 브라우저의 문제입니까?

+1

왜 파일의 이름을 변경하지 않으십니까? (또는 단순히 물음표가 없으면 제거하십시오.) – Kyslik

+0

입력 한 파일 이름은 동적입니다. 그것은 하드 코드되지 않기 때문에 나는 그것을 제어 할 수 없다. 프로젝트에서 사용자는 파일 이름을 입력하고 문자를 제한하고 싶지 않습니다. –

답변

0

내 의견에서 의미 한 것은 this입니다.

str_replace('?', '_', $name); //when saving file on the server 

이 방법은 단순히 모든 물음표는 _로 대체됩니다 사용자에 대한 제한이 없습니다, 난 더 큰 문제를 생각하지 않습니다.

FF와 GCH에 관한 부분은 대답 할 수 없습니다.

+0

나는 '?' 특성은 중요하다. 그래도 고마워! –

+0

당신이 포르투갈어 또는 스페인어로 말하는 것을 말하지 마라. 왜 내가 물음표가 파일 이름에서 그렇게 중요한지 이해하지 못한다. 나는 결코 그것을 사용하지 않는다. Tho를 찾아내는 재미를보십시오! (FF 및 GCH 문제). – Kyslik

+1

기본적으로 firefox/chrome은 이미 "_"또는 "-"로 물음표를 대체하고 있지만 URL 인코딩을 시도했지만 성공하지 못했습니다. 항상 대체합니다 –

관련 문제