2009-04-17 31 views
9

Antes de comenzar, strip_tags() no funciona.php regex para eliminar HTML

ahora,

Tengo algunos datos que necesita ser analizado, el problema es que necesito para deshacerse de todo el HTML que ha sido formateada de manera muy extraña. las etiquetas se ven así: (observe los espacios)

<p> blah blah blah </p > < a href= " link.html " > blah blah blah </a> 

Todos los regexs He estado tratando no están funcionando, y no sé lo suficiente sobre el formateo de expresiones regulares para hacer que funcionen. No me importa preservar nada dentro de las etiquetas, y preferiría deshacerme del texto dentro de un enlace si pudiera.

¿Alguien tiene alguna idea?

(Realmente tengo que acaba de sentarse y aprender expresiones regulares de un día)

Respuesta

26

¿El

preg_replace('/<[^>]*>/', '', $content) 

trabajo?

+1

en lugar de '*' usted podría usar '+', ya que con '*' también puede sustituir '<>' si se encuentra en el texto – machineaddict

2

solución que no es a prueba de tontos, pero trabajará para lo que envió:

s/<[^>]*>//g 
1

formateado extraña? Eso es válido HTML, ¿verdad? En ese caso, no lo tocaría con expresiones regulares. Ejemplos de cómo esto puede salir mal y por qué es una mala idea son legión. En cambio, usaría HTML Tidy para, por ejemplo, limpiar espacios en blanco innecesarios.

+0

Iba a publicar esto, pero estaba demasiado cansado para decirlo de forma inteligible. +1. – strager

+0

Cuando ejecuto la cadena a través de HTML Tidy, cambia los signos < and > a < and > para que strip_tags() aún no funcione en esos. Estaba usando tanto tidy_parse_string() como tidy_repair_string(). ¿Hay alguna otra función que funcione que no veo? – Me1000

-2

http://ca3.php.net/strip_tags es probablemente lo que necesita.

+0

strip_tags() no funciona (como se señala en la primera línea de mi pregunta) porque PHP no reconoce las etiquetas como HTML debido al formateo. Ese fue mi primer pensamiento también. – Me1000

-2

Pruébelo y hágamelo saber.

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags($text); 
echo "\n"; 
echo strip_tags($text, '<p><a>'); 
?> 
+0

strip_tags() no funciona (como se señala en la primera línea de mi pregunta) porque PHP no reconoce las etiquetas como HTML. Ese fue mi primer pensamiento también. – Me1000

+0

¿Lo agregó más tarde? Me lo perdí por completo ... ¿Intentaste usar preg_replace? –

+0

no, la publicación no ha sido editada en absoluto. Estaba preguntando sobre la expresión regular que podría usar. La respuesta del caos es probablemente la que terminaré usando, pero si pudiera usar tidy html para limpiar el código, entonces use strip_tags que estaría bien, pero no puedo encontrar una función en tidy html que haga lo que necesito ; de ahí que no haya verificado la respuesta del caos. :) – Me1000

12

strip_tags() funcionará si utiliza html_entity_decode() en una variable antes de strip_tags()

<?php 
$text = '<p> blah blah blah </p > < a href= " link.html " > blah blah blah</a>'; 
echo strip_tags(html_entity_decode($text)); 
?> 
+0

esta debería ser la respuesta aceptada. – dendini

+0

¿Por qué 'html_entity_decode' es necesario? – alex