fgetcsv

Ahojte , mam problem s funkcio fgetcsv, resp. s kodovanim pri nacitani subru pomocou fopen. Ide o to ze, ked mam v subore zlozka.csv napr. takyto riadok

Šťastie;čo si málo;1111111;doskové-48;VYROBCA;10;S;24;1;1;0

tak mi spracuje data tak, ze namiesto
Šťastie mam asie, a namiesto
čo si málo mam o si málo

cize ako keby mi to orezalo text o znaky s diakritikou na zaciatku slova.
subor je kodovany v windows-1250 (cp1250) a do databazy ho potrebujem dat do utf-8.

code:
$error = false;
if (file_exists($_FILES["csvfile"]["tmp_name"]) && is_readable($_FILES["csvfile"]["tmp_name"])) {
$fp = fopen($_FILES["csvfile"]["tmp_name"], "r");

if ($fp) {

while (!$error && (($data = fgetcsv($fp, 1000, ";", '"')) !== FALSE)) {

echo data[0];
}

prosim o radu. dakujem.
databáze si to imho překóduje sama, když použiješ správně SET NAMES - tady tedy mysql_query ('SET NAMES cp1250')
(předpokládám, že databázi máš v utf8 a že SET NAMES voláš hned po připojení k ní, tedy ještě než do ní začneš vkládat tadata)
Nevím, jestli tady nehraje roli také toto:

Note: Locale setting is taken into account by this function. If LANG is e.g. en_US.UTF-8, files in one-byte encoding are read wrong by this function.

(http://cz.php.net/fgetcsv)
ano mam databazu v utf8 ale takuto zmenu udajov mi to robi uz aj pred vlozenim dat do databazy. hned ako pouzijem funkciu fgetcsv mi to zblbne, subor nacitam pomocou fopen, tam este tie znaky su, ale po pouziti fgetcsv uz nie. skusil som dat prikaz aj co si mi poslal mysql_query('SET NAMES cp1250') ale nepomohlo, dal som tento prikaz este pred otvorenie suboru pomocou fopen.
ja to potom transformujem tie data, v kode pomocou

iconv("WINDOWS-1250", "UTF-8", $data[0])

ale ak tam nie je ten znak tak je mi to na nic, lebo nevie co ma prekodovat.
hm, tak to asi bude problém s lokálním nastavením - zkus mrknout sem (v tomhle se nevyznám, nikdy jsem tohle nemusel řešit):

http://us.php.net/manual/en/function.setlocale.php
Pro iso kódování funguje
setlocale(LC_ALL, 'cs_CZ.iso-8859-2');
no akurat to pozeram, ale neviem ako to pouzit, ked dam nieco z manualov tak to nefunguje. skusal som dat do funkice pre import csv
setlocale(LC_ALL, 'sk_SK.WINDOWS-1250');
ale nefunguje.
no asi neviem ako to pouzit, nefunguje to
Taky mi to nejde nastavit pro windows kódování. Ale tohle funguje:
setlocale(LC_ALL, 'cs_CZ.iso-8859-2');
A ani to nesežere žádný znaky, tak třeba by to šlo takhle vytáhnout a pak překonvertovat do správnýho kódování třeba toim iconv...
Jo, teď se mi to takhle povedlo:

header('Content-type: text/plain; charset=utf8');
setlocale(LC_ALL, 'cs_CZ.iso-8859-2');
$fp=fopen('test2.csv',r);
$data = fgetcsv($fp, 1000, ";", '"');
echo iconv("WINDOWS-1250", "UTF-8", $data[0]);
fclose($fp);
mne to nejde, nezabudaj na to ze ja som zo slovenska, mozno to bude tiez problem,pre cs_CZ. ale nejak neviem co mam nastavit tam
no mne to proste nejde. ja uz neviem
se sk_SK mi to funguje taky...
header('Content-type: text/plain; charset=utf8');
setlocale(LC_ALL, 'sk_SK.iso-8859-2');
$fp=fopen('test2.csv',r);
$data = fgetcsv($fp, 1000, ';', '"');
echo iconv('WINDOWS-1250', 'UTF-8', $data[0]);
fclose($fp);

tohle mi dělá přesně to co chceš.....
no ale kde davas tu hlavicku header, mne da ze

Cannot modify header information ...

skusil som dat aj ob_start() aj tak nic, ak to dam pred vystup echo este pri starte stranky tak mi to zblbni zobrazi sa zdrojovi kod namiesto stranky pri pouziti header. a ten setlocale mi nejde
Tak i bez toho header by to mělo fungovat, to můžeš vynechat.

Ale divný je že ti nejde ten setlocale, mě to jde :-( Uložil jsem si na sever csv ve windows kódování a přesně ten skript co tu píšu jsem na to pustil, a vypsalo to přesně to co mělo, v utf8. Bez toho setlocale to dělalo přesně to co u tebe, uřízlo to ty znaky s diakritikou, ale s nim už to jede v pohodě...
bojim sa ze problem bude na strane servera, mozno nejake prava alebo povolenia a pod.
iconv neni moc spolehlivy program. Pri prvnim chybnem znaku ukonci dalsi konverzi misto toho, aby to prekodoval s chybou.
Pri kodovani UTF / iso-2 zrovna nemuzes porovnavat delku souboru, takze nevis, zda skoncil s chybou ci ne.
Samozrejme jiny asi na linuxu, v php neni. Jeste mozna mb_ funkce, cz.php.net/mb_

miro (mbohovic.wz.cz)
Udelej jednoduchy demo priklad, dej odkaz, dej odkaz na kod a muzeme se bavit konkretne.
ok, dam demo, len trochu neskor, prosim o stpenie, nestiham, nejak sa teraz na to pozriet, ale velmi rad vypocujem vase rady