14

I have a smarty variable with html content in it like: $html="<strong>Content</strong><br/>etc etc" . I try to show it html-formatted. When showing it like {$html} only plain text appears without formatting. I try like: {$html|unescape} but then the tags are shown but not applied. Do you have any suggestions?

user985409
  • 1,355
  • 3
  • 9
  • 18

7 Answers7

46

Interestingly, none of the answers here work with Smarty 3.1.21 on CS-Cart 4.3.4. So, just to add another thought in that circumstance, use the nofilter on the $html string like so:

{$html nofilter}

dhaupin
  • 1,613
  • 2
  • 21
  • 24
12

You should try this:

{$html|unescape:'html'}

Also check manual:

http://www.smarty.net/docs/en/language.modifier.unescape.tpl

WaPaRtY
  • 500
  • 3
  • 5
10

You can try this:

{$html|unescape: "html" nofilter}
ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213
Sim1-81
  • 618
  • 4
  • 14
3

Use {$html|unescape: "html" nofilter}

Based on the answer from Sim1-81 and ρяσѕρєя K. I want to explain why the following code works.

The unescape:"html" modifier helps to keep the special characters in place. For example, "&euro;". (Docs).

"nofilter" flag disables $escape_html, which essentially disables the variable being wrapped with htmlspecialchars() (Docs).

Their solution helped as my case was to display a templated block of HTML passed in from a variable.

Thumper
  • 31
  • 3
0

Some versions of smarty unescape is not available. If this is the case, try using escape:'htmlentitydecode'.

{$html|escape:'htmlentitydecode'}
Aaron Hinni
  • 14,578
  • 6
  • 39
  • 39
0

For those who are using Smarty 2.x, the unescape method is not available, can try this instead;

{$html|html_entity_decode}
sulaiman sudirman
  • 1,826
  • 1
  • 24
  • 32
-3

you can try :

php function symbol:

function html($str) {
    $arr = array(
        "&lt;"      => "<",
        "&gt;"      => ">",
        "&quot;"    => '"',
        "&amp;"     => "&",
        "&#92;"     => chr(92),
        "&#39"      => chr(39),
        "&#039;"    => chr(39)
    );
    return nl2br(strtr($str,$arr));
}

In smarty template call:

{html({$html})}

Or without php function only smarty:

{$html|unescape:'allhtml'}

Notice: if in tpl have use reset css you can try remove it and try again.

Dũng IT
  • 2,751
  • 30
  • 29