Autor | Zpráva | ||
---|---|---|---|
potom Profil |
#1 · Zasláno: 12. 6. 2008, 09:26:31 · Upravil/a: potom
Ahoj, můj problém:
Mám něco jako fotobanku - PHP a MySQL - vše jede v kódování latin2 (8859-2) a v té fotobance je možnost, uploadovat hromadně fotky tak, že se nahrajou na FTP do uploadovací složky a když se spustí skript, tak se samy zařadí do databáze, vytvoří náhledy atd............. V té fotobance je stěžejní práce s klíčovými slovy, pomocí kterých se vyhledávají fotografie. Ty jsou k fotkám přiřazeny tak, že jsou v názvu souborů - tj. uploaduju fotku s názvem "žába příroda zvířata rosnička.jpg" a další.. na server a spustím skript - ten díky názvu získá klíčová slova a vloží je do databáze a pak soubor normálně přejmenuje podle ID z databáze např. na 65454.jpg problém je právě s kódováním toho názvu......... jak to mám převést do databáze v latin2 ???????? díky za radu.......... |
||
Kajman_ Profil * |
#2 · Zasláno: 12. 6. 2008, 10:29:49
asi pomocí iconv
|
||
potom Profil |
#3 · Zasláno: 12. 6. 2008, 10:32:57
No jasně, mě jde spíš o to v jakym kódování jsou ty názvy souborů..........
|
||
Joker Profil |
#4 · Zasláno: 12. 6. 2008, 10:41:31
potom
No jasně, mě jde spíš o to v jakym kódování jsou ty názvy souborů Tak tohle by mě taky zajímalo. Jednou jsem chtěl číst název souboru/adresáře přes parametr v url, například: stranka.php?soubor=nazev a zaboha to ne a ne rozchodit pro soubory s diakritikou... u souboru třeba "žluťoučký kůň.jpg" ať jsem převáděl kódování jak jsem chtěl, třeba file_exists ho nikdy nenašlo. |
||
Kajman_ Profil * |
#5 · Zasláno: 12. 6. 2008, 10:57:52
Když si vypíšete jenom názvy souborů, tak nepoznáte v prohlížeči, v jakém kódování to je?
|
||
potom Profil |
#6 · Zasláno: 12. 6. 2008, 11:09:23 · Upravil/a: potom
když si vypíšu názvy souborů tak vznikne v 8859-2 toto:
$new = iconv('utf-8', 'ISO-8859-2', $old); nezabere |
||
lordfrikk Profil |
#7 · Zasláno: 12. 6. 2008, 11:18:19
A databázi máš nastavenou na UTF-8?
|
||
potom Profil |
#8 · Zasláno: 12. 6. 2008, 11:26:15
lordfrikk
A databázi máš nastavenou na UTF-8? všude mám to latin2 (8859-2) - stránky i databáze, jde mi jen o převod toho filename do latin2 ale nevim z čeho |
||
Kajman_ Profil * |
#9 · Zasláno: 12. 6. 2008, 12:31:21
Spíš byt tipnul, že je nutné mít sladěné kódování, které používá (ftp) server pro názvy souborů, s kódováním ve kterém to posílá ftp klient.
|
||
potom Profil |
#10 · Zasláno: 12. 6. 2008, 17:50:45 · Upravil/a: potom
No ve výpisu potom v TC jsou ty názvy normálně s háčkama takže to kodování českejch znaků se nikde neztrácí, jde prostě jen o to v jakym kódování to tam je a jak to změnit do 8859-2
|
||
Aleš Janda Profil |
#11 · Zasláno: 12. 6. 2008, 20:06:01 · Upravil/a: Aleš Janda
Podle mých zkušeností to neošetříš. Kódování názvu souboru totiž závisí na tom, v jakém kódování se to tahá z filesystému. Na Windows se to bohužel z nějakých historických důvodů tahá v národním windows kódování - na středoevropských Windows se tedy jedná o kódování windows-1250. Ovšem všude mimo střední Evropu dostaneš jiné kódování. Co to udělá se znaky, které v kódování nelze uložit, nevím.
Na Linuxu lze kódování FS zvolit, ovšem posledních tak 5 let už je všude standardně nastaveno kódování utf-8, které je naštěstí po celém světě stejné. Čili odešlu-li formulář z Linuxu, dostaneš název souboru v utf-8. Dřív se na *nixových systémech používalo také národní kódování, ovšem iso (u nás tedy iso-8859-2). To použité kódování se ale nikde neposílá. Čili v podstatě to nějak dobře není řešitelné. Pokud by někdo věděl řešení, uvítal bych ho taky. Jedině mě napadá podle User-Agent odhadnout systém a případně podle Accept-Language odhadnout lokalizaci Windows. Nebude to čisté řešení, ale většnou to bude fungovat. Mimochodem třeba u ZIP archivů je podobný problém - názvy souborů se také ukládají v kódování FS a toto kódování není nikde definováno. Takže přenosem Windows => Linux (windows-1250 => utf-8) se diakritika zmrší, naopak samozřejmě taky, a totéž přenosem mezi dvěma Windows různých lokalizací. Kódování názvů souborů je problém, se kterým se kvůli "zpětné kompatibilitě" budeme potýkat asi ještě hodně dlouho... |
||
potom Profil |
#12 · Zasláno: 12. 6. 2008, 20:20:28 · Upravil/a: potom
Tak jsem to ošetřil a úplně neobratně - ale pro mě je důležitá funkčnost a ono to funguje
Samotnej název souboru ten prostě ať sem dělal cokoliv nešel změnit do latin2, ale zkoušením a hraním s tim sem zjistil, že jde vytvořit totožnej soubor $name ............. filename souboru s diakritikou (bez koncovky .jpg)................ $soubor = fopen("temp/".$name.".inf", "a+"); fwrite($soubor, $name); fclose($soubor); čímž sem v paralelnim adresáři TEMP vytvořil soubor se stejnym názvem jako má obrázek a do něj jsem zapsal název. a hle......... obsah souboru je v CP-1250 a načíst obsah do proměnné a převést do latin-2 a pak ten soubor inf skriptem smazat už neni problém ........ vyřešeno ale proč to nejde převést rovnou ale takhle neobratně, to jsem jelen.......... možná že to na jinym hostingu nebo v jiný části světa fungovat nebude, ale mě to stačí bohatě takto.. |
||
Aleš Janda Profil |
#13 · Zasláno: 12. 6. 2008, 20:27:26 · Upravil/a: Aleš Janda
potom
??? No to je hukot. Zapisuješ do souboru text jenom proto, abys ho potom hned přečetl a soubor smazal? Udělej to takto (pokud máš český web, bude to většinou fungovat): $name = iconv(StrPos(@$_SERVER['HTTP_USER_AGENT'],'X11') !== false ? 'utf-8' : 'windows-1250','iso-8859-2',$name); Doplnění: Celou dobu jsem myslel, že se jedná o upload formulářem návštěvníka. Nějak jsem si toho klíčového slova FTP nevšiml. Čili celé to je trochu mimo ;-) |
||
Kajman_ Profil * |
#14 · Zasláno: 12. 6. 2008, 21:26:31
Zo zkusit nahrát soubory třeba pomocí programu filezilla místo tc?
|
||
Časová prodleva: 16 let
|
0