Problém s funkcí Nette\Utils\Strings::webalize při uploadu souboru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Martin Mates
Člen | 179
+
0
-

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
+
0
-

a vis urcite, ze neni problem v kodovani? zkus si ve webalize dumpnout, co ti tam presne leze

Martin Mates
Člen | 179
+
0
-

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 :-(

Ascaria
Člen | 187
+
0
-

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.

Martin Mates
Člen | 179
+
0
-

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));
Jan Tvrdík
Nette guru | 2595
+
0
-

Hexdumpni si $form['uploadedFile']->getValue()->name.