Displaying literal curly braces {{ }} in LPs and emails

Level 10 - Community Moderator
Level 10 - Community Moderator

Marketo’s content processing can be, in a word, greedy.


When it detects Mustache-style double-curly-brace notation — like {{lead.Some Field}} — that either


(1) matches a known field (in the case of a {{lead.token}}), or

(2) simply looks like like a token (in the case of a {{my.token}})


the app grabs ownership and outputs the value of the underlying field/token.


And if it detects a {{lead.token}}-like sequence that doesn’t match a known field, it’ll throw a validation error.


Both cases are problematic if you meant to output literal double curly braces in the body of a page or email.


(If you’re wondering why you’d want literal content like “{{lead.Some Field}}” on a page, well, consider that software companies use Marketo and they may want to show sample code. And in general, no characters should ever be completely forbidden — that’s my take!)


The most obvious way to escape token-lookalike expressions doesn’t work. HTML entity-encoding in the Rich Text editor...


{{lead.Email Address;}}



... doesn’t take because the entities get converted back to the {{ }} characters when you hit Save. So effectively you haven’t done anything different.


It’s still possible, though.


In both LPs and HTML emails, just wrap one of the curly braces in a <span>:


<span>{</span>{lead.Email Address}<span>}</span>



Now Marketo won’t see the characters {{ right next to each other, and you’ll get the literal “{{lead.Email Address}}” output you want.


In Text
In the Text part of an email, you can use — why do all of my posts have something to do with Velocity? — a Velocity {{my.token}}. Thanks to order-of-operations, a one-liner like this will work:


{{lead.Email Address}}



(See also my post Even when Velocity isn’t doing anything, it’s doing something good.)



  • The goal is to have the text be correct when copied-and-pasted. So putting Unicode Word-Joiner &#8288; characters in-between curly braces wouldn’t cut it. (Though that trick is certainly useful in other cases.)
  • You might wonder why I didn’t suggest a Text {{my.token}} instead of VTL, e.g.:5ecd7eb49297cd00454defcc_curly_esc


My reasoning is that Lead-Tokens-in-Text-My-Tokens are currently not supported (so the literal value will be output) but there’s some non-zero chance that might change, so better to not rely on it. In contrast, the Velocity world wont suddenly start parsing non-Velocity notation.