2012-05-04 7 views
5

Tengo un montón de datos HTML que estoy escribiendo en un archivo PDF usando PHP. En el PDF, quiero que todo el HTML se elimine y limpie. Así, por ejemplo:Limpieza HTML con PHP para crear una cadena limpia

<ul> 
    <li>First list item</li> 
    <li>Second list item which is quite a bit longer</li> 
    <li>List item with apostrophe 's 's</li> 
</ul> 

debe convertirse en:

First list item 
Second list item which is quite a bit longer 
List item with apostrophe 's 's 

Sin embargo, si simplemente uso strip_tags(), me sale algo como esto:

First list item&#8232; 

    Second list item which is quite a bit 
longer&#8232; 

    List item with apostrophe &rsquo;s &rsquo;s 

También tenga en cuenta la sangría de la salida.

Algún consejo sobre la manera correcta de limpiar el HTML para agradables cuerdas, limpios sin espacios en blanco desordenado y personajes extraños?

Gracias :)

+2

Dudo que 'strip_tags()' solo codifique sus entidades. ¿Estás seguro de que no estás perdiendo una llamada a 'htmlentities' en algún lado? – Yoshi

+1

La sangría es exactamente lo que esperaría, PHP está quitando las etiquetas, pero no el texto adicional a su alrededor. – scragar

+0

¿Quiere decir que * debería * o * no debería * usar htmlentities() en alguna parte? En este momento no estoy. Los datos HTML provienen directamente de una base de datos. – Rein

Respuesta

3

que puede decodificar el resultado de strip_tags usando html_entity_decode o eliminarlos utilizando preg_replace:

$text = strip_tags($html_text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 

y quitar espacios en blanco desde el comienzo de sus líneas utilizan ltrim:

$content = join("\n", array_map("ltrim", explode("\n", $content))); 

para mantener los apóstrofes usa esto en su lugar:

$text = strip_tags($html_text); 
$text = str_replace("&rsquo;","'", $text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 
+0

¡Eso es genial! Casi ahí. Lo único es que los apóstrofes ahora han desaparecido por completo. ¿Se puede arreglar eso con un ajuste menor? – Rein

+0

usaste html_entity_decode o preg_replace? –

+0

Utilicé preg_replace como en su respuesta. – Rein

0

uso PHP Tidy biblioteca para limpiar su html. Pero en su caso utilizaría la clase DOMDocument para obtener datos de html.

3

Los personajes parece ser entidades html. Proveedores:

html_entity_decode(strip_tags($my_html_code)); 
+0

Por alguna razón, esto no los cambia ... – Rein

+0

Perfecto, esto funcionó de maravilla por lo que estaba teniendo un problema. – Railto

Cuestiones relacionadas