diff --git a/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java b/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java index 03ab9ccfc..77c659b50 100644 --- a/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java +++ b/handlebars/src/main/java/com/github/jknack/handlebars/EscapingStrategy.java @@ -141,6 +141,10 @@ private static Map escapeMap(final String[][] table) EscapingStrategy JS = value -> value == null ? null : StringEscapeUtils.escapeEcmaScript(value.toString()); + /** Escape variable for JSON. */ + EscapingStrategy JSON = value -> + value == null ? null : StringEscapeUtils.escapeJson(value.toString()); + /** NOOP escaping. */ EscapingStrategy NOOP = value -> value; diff --git a/handlebars/src/test/java/com/github/jknack/handlebars/EscapingStrategyTest.java b/handlebars/src/test/java/com/github/jknack/handlebars/EscapingStrategyTest.java new file mode 100644 index 000000000..415e79465 --- /dev/null +++ b/handlebars/src/test/java/com/github/jknack/handlebars/EscapingStrategyTest.java @@ -0,0 +1,18 @@ +package com.github.jknack.handlebars; + +import org.junit.Test; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; + +public class EscapingStrategyTest { + @Test + public void shouldEscapeVariableForJSON() throws IOException { + Template template = new Handlebars().with(EscapingStrategy.JSON).compileInline("{{this}}"); + + assertEquals("\\\"", template.apply("\"")); + assertEquals("\\\\", template.apply("\\")); + assertEquals("\\/", template.apply("/")); + } +}