首页 文章

在<h:outputText escape =“false”>中显示来自DB的HTML会导致HTML页面损坏

提问于
浏览
0

有没有办法设置Firefox和Chrome在h:outputText标记中使用escape = false属性 . 当某些html需要在浏览器中显示时,Firefox和Chrome会正确显示已解析的字符串,但应用程序中的任何其他链接都会被冻结(??) .

来自db的示例html:

<HEAD>
<BASE href="http://"><META content="text/html; charset=utf-8" http-equiv=Content-Type>          
<LINK rel=stylesheet type=text/css href=""><META name=GENERATOR content="MSHTML 9.00.8112.16434">
</HEAD>
<BODY><FONT color=#000000 size=2 face="Segoe UI">läuft nicht</FONT></BODY>

在页面上解析HTML:

läuftnicht

非常奇怪的是,在IE中一切正常(通常是相反的) .

我使用primefaces组件(v2.2),. xhtml,tomcat 7和JSF 2.0

2 回答

  • 6

    在我看来,你正在尝试做一些JSF并不真正想做的事情 . 您应该尝试在页面上添加链接并通过AJAX调用修改“呈现”属性,而不是尝试在网页中插入HTML .

  • 1

    你这样结束语法invalid HTML:

    <html>
        <head></head>
        <body>
            <head></head>
            <body>...</body>
        </body>
    </html>
    

    这个不对 . 只能有一个 <head><body> . 浏览器的行为未指定 . 您需要从该HTML中删除整个 <head> 和包装 <body> ,以便您最终只能使用

    <FONT color=#000000 size=2 face="Segoe UI">läuft nicht</FONT>
    

    您需要更新数据库以删除不必要的HTML,或者使用Jsoup按每个请求解析此部分,如下所示:

    String bodyContent = Jsoup.parse(htmlFromDB).body().html();
    // ...
    

    或者,您也可以在servlet的帮助下将其显示在HTML _109015中 . 例如 .

    <iframe src="htmlFromDBServlet?id=123"></iframe>
    

    Unrelated 具体问题:

    • 在数据库中存储HTML是一种糟糕的设计 .

    • 如果HTML源自用户控制的输入,那么这就是一个巨大的XSS攻击漏洞 .

    • 自1998年以来, <font> 标签已弃用 .

相关问题