2008-12-18 18 views
9

Tengo un sitio donde los usuarios pueden publicar cosas (como en foros, comentarios, etc.) utilizando una implementación personalizada de TinyMCE. A muchos de ellos les gusta copiar & pegar de Word, lo que significa que su entrada a menudo viene con una plétora de formatos MS en línea asociados.PHP para limpiar pegar entrada de Microsoft

No puedo deshacerme de <span whatever> ya que TinyMCE depende de la etiqueta span para algunos de sus formatos, y no puedo (y no quiero) forzar a dichos usuarios a usar TinyMCE's "Paste From Word" característica (que no parece funcionar tan bien de todos modos).

¿Alguien sabe de una biblioteca/clase/función que se encargaría de esto por mí? Debe ser un problema común, aunque no puedo encontrar nada definitivo. He estado pensando recientemente que una serie de expresiones regulares de fuerza bruta que buscan patrones específicos de MS podría ser el truco, pero no quiero volver a escribir algo que ya esté disponible a menos que deba hacerlo.

Además, la fijación de comillas, em-guiones, etc. sería buena. Tengo mis propias cosas para hacer esto ahora, pero realmente me gustaría encontrar un filtro de conversión de MS para gobernarlas todas.

Respuesta

7

HTML Purifier creará marcas compatibles con los estándares y filtrará muchos posibles ataques (como XSS).

Para limpiezas más rápidas que no requieren el filtrado XSS, utilizo la extensión PECL Tidy que es un enlace para la utilidad Tidy HTML.

Si no te ayudan, te sugiero que cambies a FCKEditor que tiene esta característica built-in.

+0

Gracias, pero ninguno de estos parece hacer frente al formato de MS, que es lo que más me interesa. HTML Purifier lo tiene planeado para la versión 3.5 pero con "investigación necesaria". – da5id

+0

Entonces te sugiero que cambies a fckeditor, que puede tratar con la entrada de palabras. Actualizado mi respuesta. –

+0

Hmm. Prefiero TinyMCE sobre FCKeditor por varias otras razones, pero esto puede influenciarme. Gracias por la sugerencia y estoy contento de aceptar mi +1 :) – da5id

0

El sitio web http://word2cleanhtml.com/ hace un buen trabajo al convertir desde Word. Lo estoy usando en PHP descartando, para procesar algo de HTML heredado, y hasta ahora funciona bastante bien (el resultado es un código <p>, <b> muy limpio). Por supuesto, al ser un servicio externo no es bueno usarlo en el procesamiento en línea como su caso.

Si lo intentas y te trae 400 errores, primero intenta filtrar el HTML con Tidy.

0

En mi caso, había un patrón. La parte que no siempre se inicia con

<!-- [if gte mso 9]> 

y terminó por un

<![endif]--> 

Así que mi solución era cortar todo antes y después de este bloque:

$array = explode("<!-", $string, 2); 
$begin = $array[0]; 
$end=substr(strrchr($string,'[endif]-->'),10); 
echo $begin.$end; 
0

En mi caso, esta funcionó bien:

$text = strip_tags($text, '<p><a><em><span>'); 

En lugar de tratar de extraer cosas que no desea, como la palabra embebida xml, puede especificar que tiene las etiquetas permitidas.

Cuestiones relacionadas