Java-класс для удаления HTML-тегов, сгенерированных MSWord - PullRequest
3 голосов
/ 09 ноября 2010

Некоторые HTML-формы заполняются пользователями с помощью копирования и вставки из MSWord, в редакторах FCK или других. Это генерирует неприятные теги, раздражающие другие инструменты для нормальной работы. Есть ли способ, которым сервер может очистить входящие параметры, чтобы убрать неприятные теги HTML?

Конечно, регулярные выражения бесполезны, если пользователь может написать что угодно.

Я имею в виду класс Java, который специализируется на этой работе.

Например, все это может быть заменено пустой строкой.

<p><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning />
<w:ValidateAgainstSchemas />
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables />
<w:SnapToGridInCell />
<w:WrapTextWithPunct />
<w:UseAsianBreakRules />
<w:DontGrowAutofit />
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--></p>

Ответы [ 5 ]

1 голос
/ 09 ноября 2010

Вы можете попробовать JTidy . Это Java-порт HTMLtidy, который может выполнять тот тип очистки, который вы ищете. Предостережение: я не использовал JTidy и понятия не имею, насколько хорошо он работает

1 голос
/ 09 ноября 2010

FCKEditor имеет кнопку «вставить из слова», которая работает очень хорошо. Не могли бы вы попросить своих пользователей использовать эту функцию?

0 голосов
/ 10 апреля 2015

Использование https://code.google.com/p/owasp-java-html-sanitizer/

import org.owasp.html.PolicyFactory;
import org.owasp.html.Sanitizers;

, чтобы создать html-политику только для принятия. Это избавит от всего, кроме того, что вы говорите, чтобы включить. Это не только удалит мусор Word Html, но также защитит ваш ввод html от xss.

PolicyFactory policy = (new HtmlPolicyBuilder().allowElements("table", "tr", "td", "th").allowAttributes("style").globally()).toFactory();
        policy = policy.and(Sanitizers.FORMATTING).and(Sanitizers.BLOCKS).and(Sanitizers.IMAGES).and(Sanitizers.LINKS);

String safeHtml = policy.sanitize(html);

Проблема с JTidy в том, что он может быть довольно медленным. HTML дезинфицирующее средство невероятно быстро по сравнению.

0 голосов
/ 09 ноября 2010

docx4j создает чистый HTML, который специально предназначен для обхода через CKEditor.

0 голосов
/ 09 ноября 2010

Последняя версия CKEditor поддерживает автоматическое обнаружение при вставке из слова, что означает, что им не нужно будет использовать кнопку, даже если кнопка есть. он обнаружит вставку из слова и предложит очистить его или преобразовать в простой текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...