2016-03-03 36 views
3

我试图导入CSV到使用此代码我的MySQL数据库:无效的UTF-8字符的字符串文件转换成MySQL数据库

我从后CSV文件。

<?php 

//conexiones, conexiones everywhere 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 
$db_host = 'localhost'; 
$db_user = 'root'; 
$db_pass = 'password'; 

$database = 'test'; 
$table = 'csvtable'; 
if ([email protected]_connect($db_host, $db_user, $db_pass)) 
    die("No se pudo establecer conexión a la base de datos"); 

if ([email protected]_select_db($database)) 
    die("base de datos no existe"); 
    if(isset($_POST['submit'])) 
    { 
     //Aquí es donde seleccionamos nuestro csv 
     $fname = $_FILES['sel_file']['name']; 
     echo 'Cargando nombre del archivo: '.$fname.' <br>'; 
     $chk_ext = explode(".",$fname); 

     if(strtolower(end($chk_ext)) == "csv") 
     { 
      //si es correcto, entonces damos permisos de lectura para subir 
      $filename = $_FILES['sel_file']['tmp_name']; 
      $handle = fopen($filename, "r"); 

      while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
      { 
       //Insertamos los datos con los valores... 
       $sql = "INSERT into csvtable(id, example, example2) values('$data[0]','$data[1]','$data[2]'"; 
       mysql_query($sql) or die('Error: '.mysql_error()); 
      } 
      //cerramos la lectura del archivo "abrir archivo" con un "cerrar archivo" 
      fclose($handle); 
      echo "Importación exitosa!"; 
     } 
     else 
     { 
      //si aparece esto es posible que el archivo no tenga el formato adecuado, inclusive cuando es cvs, revisarlo para    
//ver si esta separado por " , " 
      echo "Archivo invalido!"; 
     } 
    } 

?> 

的问题是,我有一个像Sol·licitudAccés的话,我得到这个错误:

Error: Invalid utf8 character string: 'Sol\xB7licitant'

你能帮我家伙?

+0

确保您的整个堆栈是UTF- 8:https://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql – Halcyon

+0

csv和utf-8有问题。使用LOAD DATA导入到Mysql。尝试将数据从SQL Server导出到Mysql时遇到此问题。客户给我的XML有问题。不要忘记在加载数据之前添加'SET CHARACTER SET'utf8''。在使用MySQL和i18n时,我还添加了“SET NAMES utf8”。 –

+0

如果你在Excel中创建/编辑csv文件 - **不要** ... utf-8支持是垃圾(你必须创建一个新的电子表格然后导入数据),请尝试打开/自由相反,你可能会有更好的运气。 – CD001

回答

3

不知道这工作这种情况下,但是当我有文本文件显示错误的口音我只是用UltraEditNotepad++到Enconde更改为UTF-8

enter image description here

+1

它已经在UTF8上:(并且仍然不工作 –

+0

@GonzaloPaniagua如果字节是'53 6F 6C B7 6C 69 63 69 74 75 64',那么'Sol·licitud'这个词在Windows-1252中被编码。 UTF-8的字节流为'53 6F 6C C2 B7 6C 69 63 69 74 75 64'。你看到了区别吗?在B7之前有'C2'。你的CSV文件很可能不是用UTF- 8或部分用UTF-8编码;Accés在Windows-1252中为'41 63 63 E9 73';在UTF-8中为'41 63 63 C3 A9 73',即'C3 A9'代替'E9' 'é'。 – Mofi

相关问题