Latte – odkaz neescapovat

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

Udělal jsem si helper, který převádí v textu odkazy na jejich HTML alternativu. Nějak takto:

public static function formatConversation($text)
	{
		$text = preg_replace("/http:\/\/([^ \n\r\t\f\[]+)/i", " <a href=\"http://\\1\" target=\"_blank\" rel=\"nofollow\">[odkaz na stránku]</a>", $text);

		return $text;
	}

Problém je ovšem, že Latte logicky, tyhle odkazy escapuje. Jak to udělat tak, abych nemusel vypnout escapování a přitom mohl mít odkazy, případně obrázky normálním tagem.

enumag
Člen | 2118
+
0
-

Provedl bych nejdříve normální escapování a teprve poté tuhle konverzi. Obojí asi pomocí helperů.

Editoval enumag (18. 3. 2014 1:08)

voda
Člen | 561
+
0
-

Můžeš vracet instanci \Nette\Utils\Html. Ta se postará o správné escapování.

Jiří Nápravník
Člen | 710
+
0
-

enumag: myslíš něco takového? Na první pohled se mi zdá, že to funguje, ale nevm, jeslti něco nepřehlížím:

$variable|escape|formatConversation|noescape

voda: to jsem samozřejmě zkoušel, ale když dám tu instanci do preg_replace – tak se to stane automaticky textem a už to není ta instance html, a pokud bych to vzal celé a dal do HTML, tak je to stejné, jako když vypnu escapovani, coz nechci…

enumag
Člen | 2118
+
0
-

@Jiří Nápravník: Ano přesně tak jsem to myslel. Mělo by to být bezpečné pokud bezpečnostní díru nevytvoří přímo ten tvůj helper.