Pereiti prie turinio

CSV importas i MySql per php. UTF8 bedos


Rekomenduojami pranešimai

Sveiki, gal kas iš labiau patyrusiu galėtu patarti. bandau pasidaryti simple scripta duomenų iš csv irašymui į duomenų bazę, tačiau lietuviškų raidžių neimportuoja

Kad mažiau būtu klausymų: Taip csv koduotė teisinga, UTF8, jeigu tiesiai per phpMyadmin darau importas viskas susikelia tvarkingai, bet ne per scripta.

 

naudoju scripta:

<?PHP
/*
I want to learn programing... Trying..
*/

//Upload file
if(is_uploaded_file($_FILES['file']['tmp_name'])){

//Connect to the database
$dbhost = 'localhost';
$dbuser = 'xx';
$dbpass = 'xx';
$dbname = 'xx';
$link = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql server');
mysql_select_db($dbname);

//Delete old data
mysql_query('TRUNCATE TABLE user;');
mysql_query('TRUNCATE TABLE str_user;');

//Process the CSV file
$handle = fopen($_FILES['file']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
	$att0 = mysql_real_escape_string($data[0]);
	$att1 = mysql_real_escape_string($data[1]);
	$att2 = mysql_real_escape_string($data[2]);

	$sql = "INSERT INTO `xx` (
				`xx` ,
				`xx` ,
				`xx` 			
				)
				VALUES ('" . $att0 . "', '" . $att1 . "', '" . $att2 . "')";
	mysql_query($sql);
}
mysql_close($link);
echo "CSV file successfully imported.";
echo "<br>";
$message="xx";

echo $message;
}
else{
die("You shouldn't be here");
}
?>

Ikelus csv eilute su Lt simboliais rodo: 90ž, turėty rodyti: ąčęėįšųū90ž

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pabandyk patikrinti koduotę pačiam PHP skripte su mysql_client_encoding() ir jeigu reikia, pakeisk į UTF8 su

mysql_set_charset('utf8', $link);

 

Šitas variantas kaip ir gelbsti, sąlyginai...

be mysql_set_charset() rezultatas - AngelÄ—Ä…Äęėįšųū

su mysql_set_charset() rezultatas - Angelėąčęėįšųū

 

O bet tačiau, mano csv eilutėje yrašas yra - ąčęėįšųžAngelėąčęėįšųū

 

Tai išvada kad importuojant nukerpa visus lietuviškus simbolius pradžioje, bet po normalaus simbolio jau palieka.

 

Gal kas minčių kokių?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labai įdomus variantas :)

 

Patikrinau ir tu teisus - fgetcsv() ignoruoja nestandartinius simbolius stulpelio pradžioje. Pabandyk viso skripto pradžioje nustatyti bendrą lokalizaciją:

setlocale(LC_ALL, 'lt_LT.UTF-8');

 

//PHP 5.3
"Angelėąčęėįšųū"

//PHP 5.3 su setlocale()
"ąčęėįšųžAngelėąčęėįšųū"

//PHP 5.4
"ąčęėįšųžAngelėąčęėįšųū"

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labai įdomus variantas :)

 

Patikrinau ir tu teisus - fgetcsv() ignoruoja nestandartinius simbolius stulpelio pradžioje. Pabandyk viso skripto pradžioje nustatyti bendrą lokalizaciją:

setlocale(LC_ALL, 'lt_LT.UTF-8');

 

//PHP 5.3
"Angelėąčęėįšųū"

//PHP 5.3 su setlocale()
"ąčęėįšųžAngelėąčęėįšųū"

//PHP 5.4
"ąčęėįšųžAngelėąčęėįšųū"

 

Ne gaila set locale nepadeda. Na ka viena iseitis php atsinaujinti nes dabar 5.2 naudoju..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jeigu turi galimybę pakeisti savo CSV failo formatą, tai tiesiog kiekvieno stulpelio reikšmę įdėk į kabutes ir problemos nebeliks. Kitas variantas yra vietoj fgetcsv() tiesiog pačiam skaityti failą ir doroti duomenis.

 

Ačiū.

 

Bandysiu su "" padirbėti, kadangi csv faila konvertuoti reikia iš excelio o paskui i sql isikelti, tai nerą problemu VB scripta paleisti excelyje kad sudeliotu kabutes.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...