如何将unicode字符集导入xls / csv文件到php / mysql?

我想给用户导入一个CSV文件到我的PHP / MySQL系统的能力,但遇到一些编码问题,当语言是俄语,只有excel可以存储在UTF-16标签编码的标签文件。

现在我的数据库是在latin1中,但是我将把它改成utf-8,就像“a-script-to-change-all-tables-and-fields-to-the-utf-8-bin-collat​​ion-在MySQL的”

但是,我应该如何导入文件? 并存储string?

我应该例如翻译它为html_entitites?

我正在使用fgetcsv命令从csv文件中获取数据。 我的代码现在看起来像这样。

 file_put_contents($tmpfile, str_replace("\t", ";", file_get_contents($tmpfile))); $filehandle = fopen($tmpfile,'r'); while (($data = fgetcsv($filehandle, 1000, ";")) !== FALSE) { $values[] = array( 'id' => $data[0], 'type' => $data[1], 'text' => $data[4], 'desc' => $data[5], 'pdf' => $data[7]); }
file_put_contents($tmpfile, str_replace("\t", ";", file_get_contents($tmpfile))); $filehandle = fopen($tmpfile,'r'); while (($data = fgetcsv($filehandle, 1000, ";")) !== FALSE) { $values[] = array( 'id' => $data[0], 'type' => $data[1], 'text' => $data[4], 'desc' => $data[5], 'pdf' => $data[7]); } 

注意,如果我将xls文件存储为excel中的csv,我将特殊字符replace为'_',所以唯一可以将俄文字符从文件中取出的方法是将文件存储在excel中作为选项卡分隔文件采用UTF16格式。

好的,解决办法是将文件从excel导出为UTF16 unicode文本,并添加';' instaid'\ t'并从utf16转换为utf8。

  file_put_contents($ tmpfile,str_replace(“\ t”,“;”,iconv('UTF-16','UTF-8',file_get_contents($ tmpfile)))); 

mysql中的表必须从latin1改为utf8

  ALTER TABLE`翻译` 
 CHANGE`text`` text` VARCHAR(100)CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
 CHANGE`desc``desc` VARCHAR(255)CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL 

然后可以像以前一样导入文件。

当我想将数据库中的数据导出到excel文件时,csv版本不是一个选项。 它必须在Excel的HTML模式下完成。 数据通过例如 urlencode()htmlentities()

这里有一些示例代码。

 <?php header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="export.xls"'); print ('<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <div id="Classeur1_16681" align=center x:publishsource="Excel"> <table x:str border=0 cellpadding=0 cellspacing=0 width=100% style="border-collapse: collapse">'); for($i = 0 ; $i < count($lines) ; $i++) { print ('<tr><td>'); print implode("</td><td>",$lines[$i]); print ('</td></tr>'); } ?> </div> </body> </html> 

或者你可以使用MySQL的加载命令 。 这个命令可以让你指定分隔符,字符集等。需要注意的是,加载数据的服务器必须具有文件的直接可见性,这意味着文件必须驻留在数据库服务器可见和可读的文件系统上。

我不会使用PHP导入它。 请考虑使用READ DATA INFILE创build临时表来存储数据。

 $file_handle = fopen($file_name, 'r'); $first_row = fgetcsv($file_handle, 0, ',', '"'); fclose($file_handle); # Your usual error checking if (!is_array($first_row)) { ... } $columns = 'column'.implode(' TEXT, column', array_keys($first_row)).' TEXT'; query("CREATE TABLE $table ($columns) Engine=MyISAM DEFAULT CHARSET=ucs2"); query("LOAD DATA LOCAL INFILE '$file_name' INTO TABLE $table ... 

然后你可以用这个表中的数据做任何你想要的。

好的,我的解决scheme也是将文件从excel导出到UTF16 unicode文本。 唯一的区别是我抓住我的文件使用制表符分隔符:

 fgetcsv($fp, '999999', "\t", '"') 

我尝试了很多select,但最简单和快速的解决scheme是使用Navicat

 http://www.navicat.com/ 

在这里输入图像描述