(N)escapování dat z DB, aneb jak escapovat jen částečně

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

Ahoj,

  1. mám v DB uložené texty – aktuální informace apod. Někdy se stane, že v DB je text, kde jsou použité přímo HTML kódy (strong, em), případně odkazy. Když text escapuji, tak se
<strong>tučně</strong>

přepíše

&lt;strong&gt;tučněr&lt;/strong&gt;

Ráda bych, kdyby se text vypisoval escapovaný, kromě HTML entit.

  1. Současně bych ráda, aby se ručně zalomené texty převedli na <br />. Používám v Latte tento kod:
$d = "bla<br/>"
{$d|escape|nl2br|noescape}

Výpis je:

bla&lt;br/&gt;<br>

Omlouvám se za dotaz, ale nemůžu přijít na to co s tím.

ryder
Člen | 17
+
0
-

Ahoj,

pokud chceš odstranit HTML tagy ze stringu, tak asi nejjednoduší bude použít macro striptags

	{$string|striptags|nl2br|noescape}

Pozor na to, že to používá PHP fci strip_tags, která není úplně dokonalá. Mnohem lepší by bylo použít nějakou knihovnu na filtrování HTML, např. HTML Purifier.

Editoval ryder (5. 4. 2016 19:30)

Saavikam
Člen | 17
+
0
-

Ahoj,
tak jsem to vyřešila takto

{!$d|nl2br}

Jo to dobré řešení?

Děkuju

Andrea

Oli
Člen | 1215
+
+1
-

ten vykřičník je starší zápis pro noescape. Takže ti to neescapuje nic… Pokud jsi si jistá, že v db nebude záškodnický kod (opakuji jistá), tak v pohodě.

Já používám něco jako níže při ukládání do databáze a při výpisu neescapuju celej výstup {$text|noescape}. Jestli to je dostatečný, doufám…

switch($str)
{
	case self::INLINE_TAGS:
		$tags = '<code><span><label><a><br><p><b><i><del><strike><u><small><ul>'
		. '<ol><li><hr><dl><dt><dd><sup><sub><big><figure><figcaption><strong><em><h1>'
		. '<h2><h3><h4><h5><h6>';
		break;
	case self::ELEMENTARY_TAGS:
		$tags = '<strong><em><del><a>';
		break;
	default:
		$tags = '<code><span><div><label><a><br><p><b><i><del><strike><u><img>'
		. '<video><audio><iframe><object><embed><param><blockquote><mark><cite><small>'
		. '<ul><ol><li><hr><dl><dt><dd><sup><sub><big><pre><code><figure><figcaption>'
		. '<strong><em><table><tr><td><th><tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>';
		break;
}
return strip_tags($str, $tags);

Editoval Oli (6. 4. 2016 7:10)

Saavikam
Člen | 17
+
0
-

Aha,

tak to jsem nevyřešila. Jistá si nemůžu být nikdy.