Autor Zpráva
deryl
Profil *
Zdravim,
mam soubor .csv a importuji ho do databáze. Nastal mi problém ale při převodu kódování do UTF-8. Používámn tuto funkci
$out=iconv('ISO-8859-2','UTF-8',$in);

Písmena jako í,á,é,ě mi fungujou, ale např. písmena č a š nefunguje. Nevíte jak tento problém vyřešit? Díky
Taps
Profil
deryl:
zkus toto
$out=iconv('cp1250','UTF-8',$in);
deryl
Profil *
Děla to pořád to stejné
nightfish
Profil
deryl:
a importuji ho do databáze. Nastal mi problém ale při převodu kódování do UTF-
buď do databáze posíláte data v jiném kódování, než databáze předpokládá (pak pomůže SET NAMES)
nebo
zdrojový soubor není v kódování ISO-8859-2 (ale to by nejspíš pomohlo [#2])
warman
Profil
zkuset a zkouset ruzna kodovani :) treba windows-1250 je pouzivan docela casto

edit: nevsiml jsem si co psal Taps...
deryl
Profil *
Zkoušel jsem všechny převody, u připojení do db mam taky. Je zvlášní ale, že na localu to jde v pohodě, ale na serveru ne, přitom ale nastavení a verzi php je stejná. Nenapadá vás ještě něco? Díky
lingvik
Profil
deryl:
Nejdřív doporučuju důkladně ověřit, jaké kódování je nastavené na straně databáze.

Jednou se mi stalo něco podobného. Vše se vyřešilo až tehdy, když jsem kódování nastavil snad všude, kde se dalo:
- v HTML v tagu <meta>
- pro databázi pomocí SET NAMES ...
- v .htaccess souboru
- jestli bylo potřeba nastavovat kódování v HTTP hlavičce, to už si nevzpomínám.

Ten server byl fakt divný, a to nejen kvůli kódování. V každém případě stejná verze a nastavení PHP zdaleka není všechno, protože do toho kecá jak databáze, tak www server.
dakur
Profil
Zdravím,

mám tu související problém.

V CSV souboru mám uložených pár údajů (firstName, lastName, email, languageCode):
Honza;Veselý;honza@vesely.cz;
Anička;Modrá;anna@modra.cz;en
Eržika;Šuhajová;erzika@suhajovi.cz;cs
ěščřžýáí;ěščřžýáíé;edhg@test.cz;ěščřžýáí

Soubor bych rád uložil do DB, proto jej po uploadu uložím do proměnné $csv a dále parsuji. Problém však vzniká při převodu kódování $csv na UTF-8. Snažím se pomocí funkce mb_detect_encoding() kódování detekovat a pomocí mb_convert_encoding() pak textový řetězec převést do UTF-8. Nemohu však najít to správné výchozí kódování. Detekovací funkce vždy vrací 'UTF-8' (i když CSV je uložený momentálně v ANSI (přes Notepad)) a znaky s diakritikou se zobrazí jako kosočtverec s otazníkem, typický pro multibyte řetězec, kdy jednomu znaku chybí jeho "druhá půlka". Zkusil jsem také provést výpis všech možných převodů kódování pomocí
echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">';
foreach(mb_list_encodings() as $chr){
  echo $chr . ': ' . mb_convert_encoding($csv, 'UTF-8', $chr) . '<br>';
}
Výsledek je zde: http://files.dta3.com/dakur/output.html

CSV soubor může být uložen v jakémkoliv kódování, potřeboval bych tedy nějakou radu, jak lze zjistit aktuální kódování a z něj převést řetězec na UTF-8. Používám špatné funkce? Chápu to celé špatně? Mám špatné nastavení? Nemá s tím někdo nějakou zkušenost?

Díky za rady!
Davex
Profil
dakur:
CSV soubor může být uložen v jakémkoliv kódování, potřeboval bych tedy nějakou radu, jak lze zjistit aktuální kódování a z něj převést řetězec na UTF-8.
Pokud to jakékoliv kódování omezíš na trojici windows-1250, iso-8859-2 a utf-8, tak stačí použít funkci autoUTF() z PHP FAQ.

Detekce jakéhokoliv kódování je trochu složitější a jsou na to specializované programy jako např. enca.
dakur
Profil
Davex:
Díky, nakonec fungovalo autoUTF. CSV byl totiž v CP-1250. Nevím proč, ale funkce mb_list_encodings() toto kódování nevypsala. Ještě jednou díky!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: