Mustache.js只允许换行,转义其他HTML

时间:2014-01-21 07:19:25

标签: javascript mustache

我正在创建用户输入的注释,并在用户点击“提交”后使用Mustache.js呈现它们。我意识到我可以用\n替换用户输入换行符(<br/>)以呈现为HTML中断,例如

myString.replace(/\n/g, '<br />');

我意识到我可以通过使用三个括号使Mustache不能逃脱HTML

{{{myString}}}

但是,我想要转义所有用户HTML,因为Mustache通常会使用双括号{{ ... }},但允许换行<br/>

除外

最好的方法是什么?我可以在渲染后替换换行符,但这似乎是一个非常低效的解决方案,而且我认为必须有更好的方法。

2 个答案:

答案 0 :(得分:12)

选项1 - 使用预标记:

<pre></pre>标记中包装文本实际上是最好的(或有效的),这将保留文本中的空白区域。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre

启用自动换行

How do I wrap text in a pre tag?   - http://jsfiddle.net/X5ZY7/


选项2 - 将字符串拆分为多行,并分别使用小胡子:

comment = userComment.split("\n")


{{#comment}}
    {{comment}}<br/>
{{/comment}}


选项3 - 在注入标签之前,使用favorite method手动转义字符串:

var div = document.createElement("div")
div.textContent = comment
comment = div.innerHTML.replace(/\n/g, "<br/>")


{{{comment}}}

答案 1 :(得分:1)

如果您希望在textarea中添加换行符,则需要将&n替换为&amp;#13;&amp;#10;