Howto ithalat xls / csv php / mysql içine unicode karakter seti ile dosya?

6 Cevap php

Ben kullanıcı benim php / mysql sistemine bir csv dosyasını almak için yeteneği vermek istiyorum, ama dili sadece excel UTF-16 kodlu sekme sekme dosyalarda saklayabilirsiniz Rus, kodlama ile bazı sorunlar koştu.

Şu anda benim veritabanı latin1 olduğunu, ancak söz "bir-komut-to-değişim-tüm tabloları ve-alanlar-to-the-utf-8-bin-harmanlama anlatıldığı gibi utf-8 olduğunu değişecek in-mysql "

Ama nasıl dosyayı almanız gerekir? ve dizeleri depolamak?

Ben örneğin html_entitites çevirmek gerekir?

I am using the fgetcsv command to get the data out of the csv file. My code looks something like this right now.


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]);
}

Not ben excel csv olarak xls dosya saklamak eğer, ben özel karakter '_' ile değiştirilir, bu yüzden dosyanın dışında rusça karakter alabilirsiniz tek yolu, sekmeli Ayrılmış dosyası olarak excel dosyasını saklamak için UTF16 biçiminde.

6 Cevap

Tamam, çözüm unicode metin utf16 ve eklemek için excel dosyayı dışa oldu ';' '\ t' ve UTF16 den utf8 dönüştürmek ve instaid.

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

Mysql tablo utf8 latin1 den değiştirilmelidir

ALTER TABLE  `translation` 
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

Ve sonra dosya önce ithal edilebilir.

Ben bir excel dosyası veritabanından veri aktarmak istediğinizde, csv sürümü not bir seçenektir. Bu Excel'in html modunda yapılmalıdır. Veri örneğin düzeltilir nerede. urlencode() ya da htmlentities()

İşte bazı örnek kod.


<?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>

Alternatif MySQL load command faydalanmak olabilir. Bu komut ayraçları, karakter seti, vb bir ihtar veri yükleme sunucusu dosya db sunucu tarafından görülebilecek ve okunabilecek bir dosya sistemi üzerinde bulunması gerekir, yani dosyanın doğrudan görünürlük sahip olmasıdır belirlemenizi sağlar.

Ben PHP kullanarak içe olmaz. Bunun yerine READ DATA INFILE kullanarak veri depolamak için geçici bir tablo oluşturmayı düşünün.

$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 ...

Sonra bu tablodaki veriler ile ne istersen yapabilirsin.

you can use http://www.dbTube.org to import CSV/Excel files into mySQL Database.

Selamlar

Andreas

Tamam, benim çözüm ALSO unicode metin utf16 Excelden dosyayı vermek oldu. Tek fark ben bir sekme sınırlayıcı kullanarak benim dosya kapmak oldu:

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

Ben alternatif çok denedim ama en kolay ve hızlı çözüm kullanmak için Navicat

http://www.navicat.com/

enter görüntü açıklaması here