Escapování neuzavřených hodnot HTML atributů

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

Nette nevyžaduje používání XHTML, ale hodnoty atributů ošetřuje správně pouze pokud jsou uzavřené do uvozovek nebo apostrofů. <span title=x> je platný HTML kód, ale <span title={$x}> Nette správně neošetří. Vidím v tom jistý rozpor.

Tato syntaxe je povolená v XHP, které teď denně používám, a musím říct, že jsem si na ni celkem rychle zvykl a uvozovky považuji v této situaci už spíše za nadbytečné.

Implementoval jsem podporu pro toto ošetřování v branchi html-escape, tak to můžete vyzkoušet, otestovat a zkontrolovat. Zajímá mě, co na tuto syntaxi říkáte.

Poznámky:

  • <span title="{$x}"> a <span title='{$x}'> samozřejmě nadále funguje.
  • <span title=a{$x}b> nebo <span title={$x}{$y}> naopak nefunguje. To je stejné jako v XHP a v podstatě žádoucí.
  • <span title={$x}> se přeloží na '<span title="' . htmlspecialchars($x) . '">'.
David Grudl
Nette Core | 8227
+
0
-

Rozhodně jsem pro. Nevidím v tom žádný BC problém.

juzna.cz
Člen | 248
+
0
-
  • <span title=a{$x}b> nebo <span title={$x}{$y}> naopak nefunguje.

Tyto pripady by mohly zobrazit nejakou chybu, jako E_USER_NOTICE nebo E_STRICT. Tudiz by to fungovalo kdyby to nekdo fakt chtel, ale aspon by to cloveka upozornilo, ze neco dela spatne (coz je vlastne vyznam E_NOTICE a E_STRICT).

Jinak skvela feature, hlavne to neukazujte klukum ze Zendu, ti by to asi nerozdychali :D

vrana
Člen | 131
+
0
-

juzna.cz napsal(a):

Tyto pripady by mohly zobrazit nejakou chybu, jako E_USER_NOTICE nebo E_STRICT. Tudiz by to fungovalo kdyby to nekdo fakt chtel, ale aspon by to cloveka upozornilo, ze neco dela spatne (coz je vlastne vyznam E_NOTICE a E_STRICT).

Souhlasím, ale dělat se mi to nechce. Podíváš se na to?

David Grudl
Nette Core | 8227
+
0
-

V současné implementaci je ještě ten problém, že nefunguje ani

<span title={$x} {$attrs}>

Kde $attrs je třeba title="ahoj".

David Grudl
Nette Core | 8227
+
0
-

Použil jsem nakonec implementaci, která jakoukoliv proměnnou uvnitř tagu při escapování obalí do uvozovek. Po zvážení všech okolností myslím, že to je nejvhodnější řešení.

vrana
Člen | 131
+
0
-

Bezva. <span {$attrs}> sice nefunguje, ale to by se stejně mělo psát jako <span {!$attrs}>, což funguje.