Jak použít CZ názvy obrázků v <img> tagu a jak je získat

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

Dobrý večer.

Nechávám nahrát uživatele na web obrázky s CZ názvy a ukládám je na server. Potom bych potřeboval udělat výpis všech doposud nahraných obrázků. Problémy jsou s CZ názvy – nezobrazují se kvůli špatnému překódování.

Presenter:

public function beforeRender() {
        // used images in this page
        $exploded = explode('/', $this->link('this'));
        $thispage = end($exploded);
        $uploadDir = WWW_DIR . "/images/upload/" . $thispage;

        $this->template->pics = array();

        foreach (Nette\Utils\Finder::findFiles('*.png', '*.jpg', '*.gif')->in($uploadDir) as $file) {
            Nette\Diagnostics\Debugger::barDump($file);
            array_push($this->template->pics, basename($file));
        }
    }

Latte:

{foreach $pics as $pic}
    <img src="{$basePath}/images/upload/{$page->dev_name}/{$pic|noescape}" />
    {$pic}
{/foreach}

Výsledek je

<img src="/develop/www/images/upload/vyrobky/Bez n�zvu.png">

Všechny soubory jsou uložené v utf-8. Co musím udělat, aby obrázky fungovaly, prosím?

mpis
Člen | 65
+
+1
-

Při ukládání souboru odstranit z jeho názvu diakritiku.

Strings::toAscii('žluťoučký kůň'); // zlutoucky kun
Hurass
Člen | 114
+
+2
-

Já osobně bych si názvy ukládal do databáze s dalšíma informacema. Pokud je později potřebuješ, stačí vytáhnout z databáze.

Mysteria
Člen | 797
+
0
-

To je ale není řešení, ale obejití problému.

2rec
Člen | 40
+
0
-

Nicméně je pro moji situaci docela postačující. Je ještě možné nějak vyměnit mezery za podtržítka, nebo by tohle nemělo dělat problémy?

mpis
Člen | 65
+
0
-

Určitě je lepší mezery nahradit třeba podtržítkem.
Podívej se do třídy Strings. Tam to je.

kejlicz
Člen | 201
+
+4
-

Na úpravu řetězce do URL tvaru slouží funkce Strings::webalize(). Pokud ten název potřebuješ i někde použít s diakritikou, ukládej si jej do DB, ale určitě bych to nedával do URL.

petr.pavel
Člen | 535
+
0
-

Proč tam máš to noescape? Čekal bych, že Nette prožene $pic přes urlencode a to ty potřebuješ.