[2008-12-12] curlyBrackets escapuje jinak HTML a jinak JavaScript

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8227
+
0
-

Ačkoliv tahle záležitost tu už byla zmíněna, myslím, že si zaslouží vlastní vlákno, aby vám ušetřilo možné komplikace.

Novinkou filtru curlyBrackets je přizpůsobení escapování podle lokálního typu obsahu. Uvnitř JavaScriptu nebo uvnitř CSS se escapuje jinak, než v HTML kódu. Díky tomu je možné zcela nativně používat PHP proměnné uvnitř JavaScriptového kódu.

// $items = array(1, 2, 3);
// $name = "Jim Beam";
<script>
var name = {$name};

var items = {$items};

for (var i in items)
{
    alert(items[i]);
}
</script>

Ale pozor! Nesmí se už používat extra uvozovky:

// $name = "Jim Beam";
<script>
var name = "{$name}";  // CHYBA, vygeneruje name = ""Jim Beam"";
</script>

Nyní je tedy možné udělat něco takového ($id je nějaký identifikátor obsahující libovolné znaky):

<style>
#{$id} { background: blue; }
</style>

<p id="{$id}">Hello!</p>

<script>
document.getElementById({$id}).style.backgroundColor = 'red';
</script>
PetrP
Člen | 587
+
0
-

Nešlo by zprovoznit i inline zápis? Popřípadě jak jednoduše v šablonách escapovat znaky v inline zápisu?

<div style="{$test}" onclick="{$test}">
David Grudl
Nette Core | 8227
+
0
-

PetrP napsal(a):

Nešlo by zprovoznit i inline zápis? Popřípadě jak jednoduše v šablonách escapovat znaky v inline zápisu?

<div style="{$test}" onclick="{$test}">

Tohle by mělo fungovat normálně, zde by se mělo totiž používat HTML escapování.