首页 文章

在h:outputText中转义除了换行符之外的所有内容

提问于
浏览
1

我有文本,用户在textarea中输入,我想在另一页上显示它 .

第一个问题是来自textarea的换行符是\ r \ n而不是br,但我可以简单地替换所有换行符 . 我需要帮助的实际问题是在此之后显示:

h:默认情况下,outputText会转义所有内容,因此要使换行符正常工作,我需要执行escape =“false”,但由于显而易见的原因,我不希望用户通过输入其他HTML标记来弄乱页面或更糟糕的是,Javascript . 所以我需要以某种方式逃避除了线路之外的一切 .

我该怎么做?或者是否有一个不同的JSF组件可以使这更简单?

不幸的是,前标签或CSS白色空间不是一种选择 .

1 回答

  • 2

    您也可以只显示预先格式化的文本,以便 \n 显示为真正的换行符,而不是将 <br> 替换为 <br> 并使用 <h:outputText escape="false"> . 你可以使用元素的CSS white-space property,可以设置为 prepre-wrappre-line .

    例如 .

    <h:outputText value="#{bean.text}" styleClass="preformatted" />
    

    .preformatted {
        white-space: pre;
    }
    

    如果您真的打算将文本显示为未转义的HTML,那么您可以通过使用能够执行该作业的HTML解析器(例如Jsoup)来消除XSS攻击向量 . 另见我昨天发布的这个答案:JSF OutputText with html style .

相关问题