Отображение HTML из БД вприводит к неработающей HTML-странице - PullRequest
0 голосов
/ 08 февраля 2012

Есть ли способ настроить Firefox и Chrome для работы с атрибутом escape = false в теге h: outputText.Когда есть какой-то html-файл, который нужно отобразить в браузере, Firefox и Chrome правильно отображают разобранную строку, но все другие ссылки в приложении замораживаются (??).

Пример html из db:

<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äuft nicht

Что очень странно, так это то, что в IE все работает (обычно наоборот).

Я использую основные компоненты (v2.2), .xhtml, tomcat 7 и JSF 2.0

Ответы [ 2 ]

6 голосов
/ 08 февраля 2012

Вы получите синтаксически неверный HTML таким образом:

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

Это не правильно. Может быть только один <head> и <body>. Браузеры будут вести себя неопределенно. Вам нужно удалить весь <head> и обтекание <body> из этого HTML, чтобы в итоге вы получили only

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

Вам нужно будет либо обновить БД, чтобы удалить ненужный HTML, либо использовать Jsoup , чтобы разобрать этот фрагмент на основе запроса, как показано ниже:

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

В качестве альтернативы, вы также можете отобразить его внутри HTML <iframe> вместо этого с помощью сервлета. Э.Г.

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

Не связано с конкретной проблемой:

  1. Хранение HTML в БД - ужасный дизайн.
  2. Если HTML-код поступает от контролируемого пользователем ввода, у вас есть огромная дыра в атаке XSS.
  3. Тег <font> устарел с 1998 года.
1 голос
/ 08 февраля 2012

Мне кажется, что вы пытаетесь сделать что-то, чего JSF на самом деле не должен был делать. Вместо того, чтобы пытаться вставить HTML на свою веб-страницу, вы должны попытаться разместить ссылки на своей странице и изменить атрибут «рендеринга» с помощью вызова AJAX.

...