我正在创建用户输入的注释,并在用户点击“提交”后使用Mustache.js呈现它们。我意识到我可以用\n
替换用户输入换行符(<br/>
)以呈现为HTML中断,例如
myString.replace(/\n/g, '<br />');
我意识到我可以通过使用三个括号使Mustache不能逃脱HTML
{{{myString}}}
但是,我想要转义所有用户HTML,因为Mustache通常会使用双括号{{ ... }}
,但允许换行<br/>
最好的方法是什么?我可以在渲染后替换换行符,但这似乎是一个非常低效的解决方案,而且我认为必须有更好的方法。
答案 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;