我有文本,用户在textarea中输入,我想在另一页上显示它。
第一个问题是来自textarea的换行符是\ r \ n而不是br,但我可以简单地替换所有换行符。我需要帮助的实际问题是在此之后显示:
h:默认情况下,outputText会转义所有内容,因此要使换行符正常工作,我需要执行escape =“false”,但由于显而易见的原因,我不希望用户通过输入其他内容来弄乱页面HTML标签甚至更糟,Javascript。所以我需要以某种方式逃避除了线路之外的一切。
我该怎么做?或者是否有一个不同的JSF组件可以使这更简单?
不幸的是,前标签或CSS空格不是一种选择。
答案 0 :(得分:2)
您可以只显示预先格式化的文本,以便\n
显示为真正的换行符,而不是将<br>
替换为<h:outputText escape="false">
并使用\n
。您可以使用元素的CSS white-space
property来设置pre
,pre-wrap
或pre-line
。
E.g。
<h:outputText value="#{bean.text}" styleClass="preformatted" />
与
.preformatted {
white-space: pre;
}
如果确实打算将文本显示为未转义的HTML,那么您可以使用能够胜任该工作的HTML解析器(例如Jsoup)来消除XSS攻击向量。另见我昨天发布的这个答案:JSF OutputText with html style。