Jak vypnout context Aware Escapovani
- esorimer
- Člen | 114
Zdravím,
napsal jsem si vlastní makro (image) které když použiji takto:
{image 'images/test.gif'}
<img src="{image 'images/test.gif'}" />
<a onmouseover="DoSomething('{image 'images/test.gif'}');">xxx</a>
Dá tento výsledek:
/www/xx/images/test.gif
<img src="/www/xx/images/test.gif" />
<a onmouseover="DoSomething('"\/www\/xx\/images\/test.gif"');"></a>
První dva řádky jsou OK, ale ten poslední je špatně. Co se s tím dá dělat?
- Jan Tvrdík
- Nette guru | 2595
Nemělo by to být správně takto?
<a onmouseover="DoSomething({image 'images/test.gif'});">xxx</a>
- esorimer
- Člen | 114
castamir napsal(a):
Vykřičník nepomůže?
{!image 'images/test.gif'}
Nepomůže, to skončí chybou Parse Error
syntax error, unexpected test.gif (T_CONSTANT_ENCAPSED_STRING), expecting
‚,‘ or ‚;‘
135: <img src="<?php echo image 'test.gif' ?>" />
Jan Tvrdík napsal(a):
Nemělo by to být správně takto?
<a onmouseover="DoSomething({image 'images/test.gif'});">xxx</a>
To taky nepomůže, pořád se to vypíše špatně. Jo a ted jsem si všim že to dělá stejnou chybu i s normálním linkem a ani tam nemusí být volání funkce …:
{link Homepage:}
<a onmouseover="{link Homepage:}">xxx</a>
/www/
<a onmouseover=""\/www\/"">xxx</a>
PS: Jdou vám tu na fóru hodiny o hodinu napřed, žeby chybné
locales? :) Beru zpět, měl sem blbě nastavené hodiny na svém PC, tak
mi JS ukazoval že jsem vložil příspěvěk před hodinou … o:-)
Editoval esorimer (22. 3. 2013 8:31)
- Jan Tvrdík
- Nette guru | 2595
To taky nepomůže, pořád se to vypíše špatně. Jo a ted jsem si všim že to dělá stejnou chybu i s normálním linkem
Popsané chování je v pořádku. Proč ho považuješ za chybné?
- esorimer
- Člen | 114
Jan Tvrdík napsal(a):
To taky nepomůže, pořád se to vypíše špatně. Jo a ted jsem si všim že to dělá stejnou chybu i s normálním linkem
Popsané chování je v pořádku. Proč ho považuješ za chybné?
Za chybný považuji výsledek, neříkám že je to bug nette. Ale třeba vůbec nechápu kde se tam > bere to " V prvním ani druhém příkladu použití se žádné uvozovky nevrací.
Pardon, asi jsem si stál na vedení. Ono je to fakt dobře :) Nedošlo mi
že zápis
<a onmouseover=„DoSomething("\/www\/")“>xx</a>
je validní zápis JS. Pořád jsem tam chtěl mít místo "
jednoduchou uvozovku.
Asi sem fakt potřeboval lekci z JavaScriptu a nez Nette :D
Editoval esorimer (22. 3. 2013 10:47)
- Filip Procházka
- Moderator | 4668
Správně například takto.
<a href="{image 'images/test.gif'}" onmouseover="DoSomething(this.href);">xxx</a>
Do javascriptových attributů je třeba hodnoty validně escapovat, Nette se tedy chová správně, ty to jen špatně používáš.
Btw, tohle makro image neznám. Pokud je to tvé vlastní makro, ještě je tu možnost, že jsi ho implementoval špatně.
- esorimer
- Člen | 114
enumag napsal(a):
Když je href atribut jiný, tak data-* atribut.
Pozn. nečisté je už to použití atributu on*.
Myslím že to není až tak nečisté, ale souhlasím že použití data-* by bylo lepší, kdybych to psal v HTML5. Jenže kvůli zpětné kompatibilitě a kvůli tomu, že přepisuju do nette starý projekt a nechce se mi přepisovat tuny JS kódu (který je sice starý a ošklivý, ale spolehlivě funguje) potřebuji co potřebuji.
Filip Procházka napsal(a):
Správně například takto.
<a href="{image 'images/test.gif'}" onmouseover="DoSomething(this.href);">xxx</a>
Do javascriptových attributů je třeba hodnoty validně escapovat, Nette se tedy chová správně, ty to jen špatně používáš.
Jak mám tedy Nette použít, abych vypsal do prohlížeče tento html kód?
<a href="neco.php" onmouseover="DoSomething('/www/xx/images/test.gif')">xxx</a>
Btw, tohle makro image neznám. Pokud je to tvé vlastní makro, ještě je tu možnost, že jsi ho implementoval špatně.
Je to mé vlastním akro, ale jak jsem už psal, stejně se to chová i s makrem {link} …
PS: Opravdu nepotřebuji učit JavaScript nebo zásady správného kódování, děkuji vám za snahu, ale učím se Nette a potřebuji poradit s Nette.
PSS: A když už se to escapuje, proč je tam na začátku a na konci to "? Když budu chtít předat do JS makrem jakoukoliv hodnotu tak se obalí do "?
Editoval esorimer (22. 3. 2013 10:38)