Problém s funkcí Nette\Utils\Strings::webalize při uploadu souboru
- Martin Mates
- Člen | 179
Při uploadování souboru přes formulář (addUpload) bych potřeboval uložit do DB webalized název nahrávaného souboru. Zkoušel jsem ten název získat takto:
$form['soubor']->getValue()->getSanitizedName();
To ale v případě názvu souboru „rozčarovaný ceník.pdf“ vrátí pouze „rozc“.
V API jsem našel, že funkce getSanitizedName()
využívá
Nette\Utils\Strings::webalize
, tak jsem zkusil:
Nette\Utils\Strings::webalize($form['soubor']->getValue()->name, '.');
To také vrátí jen „rozc“.
Když ale zkusím:
Nette\Utils\Strings::webalize('rozčarovaný ceník.txt', '.');
Tak to funguje a vrátí to „rozcarovany-cenik.txt“.
Přitom, když si vypíšu v debugu
$form['soubor']->getValue()->name
tak to je „rozčarovaný
ceník.txt“.
Nevím proč to nefunguje. Nevrací
$form['soubor']->getValue()->name
to jméno v jiném
kódování než utf-8??
Díky za jakoukoli radu.
Editoval Martin Mates (4. 4. 2012 16:48)
- marek.dusek
- Člen | 99
a vis urcite, ze neni problem v kodovani? zkus si ve webalize dumpnout, co ti tam presne leze
- Martin Mates
- Člen | 179
marek.dusek napsal(a):
a vis urcite, ze neni problem v kodovani? zkus si ve webalize dumpnout, co ti tam presne leze
To nevím jestli není problém v kódování, jak jsem psal. Zkoušel jsem
si to dumpovat v té webalize a pokazí to ta
metoda toAscii()
Zkoušel jsem detekovat kodovani
mb_detect_encoding($form['soubor']->getValue()->name)
a to
vrátí UTF-8. Když tam dám ten string natvrdo
"rozčarovaný ceník.txt"
tak to funguje v pořádku. Nechápu
to :-(
- Martin Mates
- Člen | 179
Ascaria napsal(a):
Takhle blbě se usekávají znaky jen když chceš například win-1250 reprezentovat jako utf-8 (v utfku vznikne nevalidní znak). Pamatuju si, že jednou jsem měl iconv z utf-8 do utf-8 a pak to jelo, aneb utf-8 neni utf-8.
Tak bohužel nejde ani
\Nette\Utils\Strings::webalize(iconv('UTF-8', 'UTF-8', $values['attachment_1']->name));