Clase Java para eliminar etiquetas HTML generadas por MSWord

Algunos formularios HTML los completan los usuarios mediante copiar y pegar desde MSWord, en los editores de FCK u otros. Esto genera etiquetas desagradables que molestan a otras herramientas para que funcionen bien. ¿Hay alguna forma de que el servidor pueda limpiar los parámetros entrantes, de modo que se eliminen las desagradables etiquetas HTML?

Por supuesto, las expresiones regulares no son útiles, siempre que el usuario pueda escribir lo que sea.

Me refiero a la clase de Java un poco especializada en este trabajo.

Por ejemplo, todo esto podría ser reemplazado por una cadena vacía.


Normal
9
0


false
false
false







MicrosoftInternetExplorer21






/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:4;
mso-tstyle-colband-size:9;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:156cm 10pt 0cm 0pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.5.4pt;
mso-pagination:widow-orphan;
font-size:0pt;
font-family:"Times New Roman";
mso-ansi-language:#5.4;
mso-fareast-language:#0;
mso-bidi-language:#0001;}


preguntado el 08 de noviembre de 10 a las 19:11

Hola. Tengo el mismo problema. ¿Ha encontrado la solución para el problema anterior? -

Hola, finalmente usé javax.swing.text.html.parser.ParserDelegator.parse y funciona bien -

Hola. ¿Cómo usó javax.swing.text.html.parser.ParserDelegator.parse? ¿Puedes pegar el código? ¿Todavía tengo ese problema? -

5 Respuestas

Utiliza la https://code.google.com/p/owasp-java-html-sanitizer/

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

para construir una política de sólo aceptar html. Esto eliminará todo excepto las cosas que diga que incluya. Esto no solo eliminará la basura de Word Html, sino que también protegerá su entrada html de 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);

El problema con JTidy es que puede ser bastante lento. El desinfectante html es increíblemente rápido en comparación.

Respondido 28 Abr '15, 18:04

FCKEditor tiene un botón "pegar desde palabra" que funciona muy bien. ¿Podrías pedirles a tus usuarios que utilicen esta funcionalidad?

respondido 08 nov., 10:22

Bien, pero necesito una solución del servidor siempre que se puedan aplicar otros widgets. Y mis usuarios no usarán el botón, lol - Llistes Sugra

Tu podrías intentar JTidy. Es un puerto Java de HTMLtidy, que puede realizar el tipo de limpieza que estás buscando. Advertencia emptor: no he usado JTidy y no tengo idea de qué tan bien funciona.

respondido 08 nov., 10:22

La última versión de CKEditor admite la detección automática cuando pegas desde una palabra, lo que significa que no tendrían que usar el botón, aunque el botón esté allí. detectaría el pegado de una palabra y se ofrecería a limpiarla o convertirla en texto sin formato.

respondido 08 nov., 10:23

docx4j produce HTML limpio, que está específicamente diseñado para circular a través de CKEditor.

respondido 09 nov., 10:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.