我的ajax上传csv文件,用utf-8字符集剪切我的寄存器

qhhrdooz  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(343)

我们在字符集和排序规则方面有很多问题需要解决。所有的事务我们都遇到了麻烦,但我们解决了ajax,html和php在mysql数据库,最后我们解决了所有的麻烦。
但是我们要上传一个ajaxcsv文件(只有;用于分隔字段)
西班牙语字母(ññáéíóú) 当你找到那些信件的时候,上传的时候就会被剪切。
这是我的函数上传,从我的ajax调用:

if(!empty($_FILES['fileajax']['name'])){

   try {

  $DB = new Db(DBHost,DBName,DBUser,DBPassword);      
  $output = "";

  $allowed_ext = array("csv");

  $tmp = explode('.', $_FILES['fileajax']['name']);
  $extension = end($tmp);

  if(in_array($extension,$allowed_ext)){
    $file_data = fopen($_FILES['fileajax']['tmp_name'],"r");
    fgetcsv($file_data, 10000, ";");
    while($row = fgetcsv($file_data)){

      $datos = explode(";",$row[0]);

      $values = array(
        addslashes($datos[0]),
        addslashes($datos[1]),
        addslashes($datos[2]),          
        addslashes($datos[3]),          
        date('Y-m-d H:i:s', strtotime($datos[4])),          
        date('Y-m-d H:i:s', strtotime($datos[5])),          
        date("Y-m-d H:i:s"),
        date("Y-m-d H:i:s"),
        $_SESSION['sess_username_id'],
        $_SESSION['sess_username_id']
      );

      $DB->query("INSERT INTO table (idP, num, nom, can, inio, mino, rt, tiate, idUate, idUrt) VALUES(?,?,?,?,?,?,?,?,?,?)", $values);//Parameters must be ordered

      var_dump($values);
    }
  }else{
    echo "error1";
  }

}catch (PDOException $e) {
  echo $this->ExceptionLog($e->getMessage());
  die();
}

  }else{
    echo "error2";
  }

我们的ajax是:

$('#upload_csv').on('submit',function(e){
  e.preventDefault();
  $('#preloader').fadeIn('slow');

  $.ajax({
    url: "acciones/importItem.php",
    method: "POST",
    data: new FormData(this),
    contentType:false,
    cache: false,
    processData:false,
    success: function (data){
      //console.log(data);
      if(data == 'error1'){
        toastr.error('Archivo no valido...', 'Cargar partida', {timeOut: 1500});
      }else if(data == 'error2'){
        toastr.error('Seleccione Archivo...', 'Cargar partida', {timeOut: 1500});
      }else{
        toastr.success('Partidas cargadas exitosamente...', 'Cargar partida', {timeOut: 1500});
      $('#modalSubirItem').modal('hide');
      location.reload();

      }
    }

  });
  $('#preloader').fadeOut('slow');

});

我真的认为我们在上传配置中忘记了一些东西。
这是我要上传的文件(另存为csv文件类型(请用这个制作csv)):jsfiddle in html appartment!!
https://jsfiddle.net/x7e2am5c/2/

svdrlsy4

svdrlsy41#

谢谢西奥的帮助。
你带给我的密码 setlocale(LC_ALL, "es_ES.UTF-8"); 上传结果没有什么不同,但它是一个解决方案的指南,该解决方案是使用utf8\u编码添加php数组Map。
以下代码修改是csv ajax上载的解决方案:

while($row = fgetcsv($file_data)){
      $row = array_map("utf8_encode", $row);//adding this line solve the problem
      $datos = explode(";",$row[0]);

      $values = array(
        addslashes($datos[0]),
        ...

谢谢!

exdqitrt

exdqitrt2#

我想 fgetcsv() 是罪魁祸首。因为它使用区域设置,utf-8文件可能会被错误地读入。
在这种情况下

setlocale(LC_ALL, "es_ES.UTF-8");

可能会成功

相关问题