Мой ajax-файл csv с испанскими буквами в кодировке utf-8 вырезал мои регистры - PullRequest
0 голосов
/ 26 августа 2018

У нас очень много проблем с кодировкой и сопоставлениями, которые решаются однозначно.Все транзакции, которые у нас были, были головной болью, но мы решили с помощью ajax, html и php в базе данных mysql, наконец-то мы решили все проблемы, наконец.

Но мы делаем загрузку ajax csv (только с; для отдельных полей)) с любой
испанской буквой (ñÑáéíóú) поле обрезается при загрузке, когда найти эти буквы.

это моя функциональная загрузка, вызванная из моего 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 filetype (пожалуйста, сделайте ваш csv с этим)): jsfiddle inквартира html !!

https://jsfiddle.net/x7e2am5c/2/

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Спасибо Тео за вашу помощь.

Код, который вы мне принесли setlocale(LC_ALL, "es_ES.UTF-8"); не имеет значения в результате загрузки, но послужил руководством для решения, которое добавило карту массива php с utf8_encode.

Следующей модификацией кода было решение для загрузки ajax CSV:

 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]),
        ...

Спасибо!

0 голосов
/ 26 августа 2018

Я думаю, что fgetcsv() является виновником здесь. Поскольку он использует настройки Locale, файлы UTF-8 могут быть прочитаны неправильно.

В этом случае

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

может сделать трюк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...