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

Rya*_*yan 8 javascript mustache

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

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

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

{{{myString}}}

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

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

Mat*_*sch 12

选项1 - 使用预标签:

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

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

并启用自动换行

如何在预标记中包装文本? - http://jsfiddle.net/X5ZY7/


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

comment = userComment.split("\n")


{{#comment}}
    {{comment}}<br/>
{{/comment}}
Run Code Online (Sandbox Code Playgroud)


选项3 - 在注入标记之前,使用您喜欢的方法手动转义字符串
:

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


{{{comment}}}
Run Code Online (Sandbox Code Playgroud)

  • 选项 2 应为 ` {{#comment}} {{.}}&lt;br/&gt; {{/comment}} ` (2认同)