Problém s escapováním proměnné

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

Mám problém, že se mi nechce vypsat proméná, která nemá být escapována.

Takto ji vypisuji:

<?php
<a href="{!$file['path']}">{!$file['path']}</a>
?>

a takto je vypsána:

<?php
<a href="C:%5Cdev%5Cwww%5Cissuelog%5Cupload%5Catt0011-2011_08_08-16_08_23.jpg">C:\dev\www\issuelog\upload\att0011-2011_08_08-16_08_23.jpg</a>
?>

Problém je v tom, že do href parametru mi ji escapuje vždy.
Netušíte čím to je?

Filip Procházka
Moderator | 4668
+
0
-

Netuším a ani tušit nechci. Proč ti proboha vadí, že je escapovaná?

Editoval HosipLan (8. 8. 2011 17:06)

na1k
Člen | 288
+
0
-

To bude tím, že do odkazu namísto URI cpeš nějakou lokální cestu na disku. To, že zadání cesty do adresního políčka ve většině prohlížečů soubor otevře je jedna věc, ale v href to podle specifikace nemá co dělat.

( Když vypisuješ proměnné pomocí Latte, jen výjimečně potřebuješ použít vykřičník. Můžeš zkusit použít n:href="$file['path']", ale asi dopadneš stejně. )

nanuqcz
Člen | 822
+
0
-

V latte půjde i tohle (úplně bez escapování)

<a href="<?php echo $file['path'];?>">{!$file['path']}</a>
Ladis-s
Člen | 53
+
0
-

Potřebuji vypsat odkaz na uploadovaný soubor, který bude někde v adresáři, to je lokální cesta na disku.
Nebo jak to udělat lépe?
Zkoušel jsem i variantu s php, ale udělá to samé:

<?php
<a href="<?php echo $file['path'];?>">{!$file['path']}</a>
?>
Majkl578
Moderator | 1364
+
0
-

Ty by sis měl hlavně dostudovat princip, jak webové aplikace fungují. Přes HTTP nemůžeš odkazovat lokální adresou ve filesystemu. Musíš odkazovat tak, aby cesta byla platná v rámci HTTP a server ji uměl rozpoznat a zpracovat. Přičemž k takové adrese nemusí ani existovat ekvivalentní soubor na disku.
V Nette bys měl veřejně dostupné soubory ukládat:
a) do nějaké veřejné podsložky ve www,
b) ukládat někam skrytě a soubory servírovat presenterem.

Pravidlo č. 1: Do Latte nikdy necpi PHP bloky. V krajní nouzi lze použít makro {? ... }, které se chová stejně jako <?php ... ?>.

Pravidlo č. 2: Dodržuj pravidlo č. 1.

mkoubik
Člen | 728
+
0
-

Nebo pokud to má opravdu fungovat jenom lokálně použít protokol file://.