Codeigniter上传文件并使用特殊字符保存名称

时间:2013-06-04 15:08:19

标签: codeigniter file-upload special-characters

我将图像保存在用户要发送的文件夹中。但是如果我用特殊字符(ç,á,ã等)保存图像,系统无法识别,并且保存文件名错误。

示例:文件名:cação.png并保存:caà § à £ o

控制器:

public function save_image(){
    $config['upload_path'] = 'images/uploaded/';
    $config['allowed_types'] = 'gif|jpg|png|jpeg';
    $config['max_size'] = '300';
    $config['max_width'] = '1024';
    $config['max_height'] = '768';

    $this->load->library('upload', $config);
    $sub_data = array(
        'error' => '',
        'result' => ''
    );

    if( ! $this->upload->do_upload())
    {
        $sub_data['error'] = "* Erro a carregar a imagem, por favor verifique todos os requisitos da imagem.<br/>
            Error type: ";
        $sub_data['error'] .= $this->upload->display_errors();
    }
    else 
    {
        $sub_data['result'] = $this->upload->data();
        $name_file = $sub_data['result']['file_name'];

        $data['logotipo'] = $sub_data['result']['file_name'];
        $this->edit_data_m->update_image($data);

    }
    $template_data['main_content'] = $this->load->view('editar_imagem_empresa_v', $sub_data, true);
    $this->load->view('template_admin_v', $template_data);
}

型号:

public function update_image($data){
    $this->load->helper('file');

    $imagem = $this->get_image();
    $nome_img = $this->get_image()->result_array();
    if($imagem->num_rows() > 0 && $nome_img[0]['logotipo'] != "sem_logotipo.png")
    {
        $imagem2 = $this->get_image()->result_array();
        unlink('./images/uploaded/'.$imagem2[0]['logotipo']);
    }
    $this->db->where('id', $this->session->userdata('id_empresa'));
    $this->db->update('empresa_tbl', $data);
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

<强>控制器:

    if( ! $this->upload->do_upload())
    {
        $sub_data['error'] = "* Erro a carregar a imagem, por favor verifique todos os requisitos da imagem.<br/>
            Tipo de erro: ";
        $sub_data['error'] .= $this->upload->display_errors();
    }
    else 
    {
        $sub_data['result'] = $this->upload->data();
        $name_file = preg_replace('/[^(\x20-\x7F)]*/','', $sub_data['result']['file_name']);
        $data['logotipo'] = $sub_data['result']['file_name'];
        $this->edit_data_m->update_image($data);
    }
    $template_data['main_content'] = $this->load->view('editar_imagem_empresa_v', $sub_data, true);
    $this->load->view('template_admin_v', $template_data);
}

之后:

  1. 编辑upload.php
    • system - &gt;库 - &gt; upload.php的
  2. function do_upload()
    • 202行
    • $this->file_name = $this->_prep_filename($_FILES[$field]['name']);
  3. 编辑第202行:
    • $this->file_name = $this->_prep_filename(preg_replace('/[^(\x20-\x7F)]*/','', $_FILES[$field]['name']));

答案 1 :(得分:0)

您始终可以使用以下内容重命名文件:

$new_file_name = preg_replace('/[^(\x20-\x7F)]*/','', $_FILES['result']['name']);
$config['file_name'] = $new_file_name;

然后

if( $this->upload->do_upload() ) {
    // do your stuff
}