2010-09-23 19 views
12

Tengo el siguiente código:¿Por qué no funciona strip_tags en PHP?

<?php echo strip_tags($firstArticle->introtext); ?> 

Donde $ firstArticle es un objeto stdClass:

object(stdClass)[422] 
    public 'link' => string '/maps101/index.php?option=com_content&view=article&id=57:greenlands-newest-iceberg&catid=11:geography-in-the-news' (length=125) 
    public 'text' => string 'GREENLAND'S NEWEST ICEBERG' (length=26) 
    public 'introtext' => string '<p>A giant chunk of ice calved off the Petermann Glacier on 

    the northwest side of Greenland this summer. At nearly 100 square miles (260 

    sq. km) in size, four times the size of Manhattan, th' (length=206) 
    public 'date' => 
    object(JDate)[423] 
     public '_date' => int 1284130800 
     public '_offset' => int 0 
     public '_errors' => 
     array 
      empty 

Se puede ver que $ firstArticle-> introtext se refiere a la cadena:

"<p> Un pedazo gigante de hielo se desprendió del glaciar Petermann en el lado noroeste de Groenlandia este verano. Con casi 100 millas cuadradas (260 km2) de tamaño, cuatro veces el tamaño de Manhattan, th"

La etiqueta <p> es un problema para mí en esta aplicación, sin embargo, strip_tags se niega rotundamente a eliminarla y no puedo entender por qué. De hecho, me di por vencido en strip_tags y trató de hacer un preg_replace lugar con la expresión regular/< | *>/(\ n.):?

preg_replace('/<(.|\n)*?>/', '', $firstArticle->introtext); 

Pero eso no funcionó, ya sea! ¿Cómo puedo eliminar todas las etiquetas HTML (coincidentes o no) de esta cadena cuando la publico?

+4

¿Está _muy_ seguro de que no es '& lt: p >' que hay allí? – Wrikken

+0

He probado strip_tags() en su cadena y funciona aquí. – Evert

Respuesta

47

intento:

<?php echo strip_tags(html_entity_decode($firstArticle->introtext)); ?> 
+1

¡He estado buscando esto por años! Gracias. – hohner

+0

¡Trabajó para mí, gracias! –

+0

Gracias por esto, solucionó un problema que estaba tratando de curar durante horas. – Steve

6

muy curioso que strip-etiquetas no funciona ....

tal vez su "<p>" está codificado-htmlentity? como "& lt; p & gt;" (Echar un vistazo a código fuente de la página)

otehrwise Esto reemplazará todas las etiquetas, también htmlentity codificados queridos, pero es casi obvio que esta p-etiqueta es simplemente codificado-htmlentity a fin de tratar que la primera ...

preg_replace('/(?:<|&lt;).*?(?:>|&gt;)/', '', $firstArticle->introtext); 
1

En mi caso, debo utilizar htmlspecialchars_decode($str);. html_entity_decode($firstArticle->introtext) no parece funcionar para mí.

A veces tengo que usar htmlentities primero.

 $txt = htmlentities($txt, null, 'utf-8'); 
     $txt = htmlspecialchars_decode($txt); 
Cuestiones relacionadas