2010-09-23 6 views
12

J'ai le code suivant:Pourquoi strip_tags ne fonctionne pas en PHP?

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

Où $ firstArticle est un objet 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 

Vous pouvez voir que $ firstArticle-> introtext fait référence à la chaîne:

"<p> Un morceau de glace géant est descendu du glacier Petermann sur le côté nord-ouest du Groenland cet été.Aux près de 100 miles carrés (260 km carrés), quatre fois la taille de Manhattan, th"

La balise <p> est un problème pour moi dans cette application, cependant strip_tags refuse absolument de l'enlever et je n'arrive pas à comprendre pourquoi. J'ai donné en fait sur strip_tags et a tenté de faire une place preg_replace avec le regex/< | *>/(\ n.):

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

Mais cela ne fonctionne pas non plus! Comment puis-je supprimer toutes les balises HTML (appariées ou non) de cette chaîne lorsque je l'édite?

+4

Êtes-vous sûr que ce n'est pas «& lt: p >»? – Wrikken

+0

J'ai testé strip_tags() sur votre chaîne et cela fonctionne ici. – Evert

Répondre

47

essayer:

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

Été à la recherche de cela pour les âges! Merci. – hohner

+0

A travaillé pour moi, merci! –

+0

Merci pour cela, il a résolu un problème que j'ai essayé de guérir pendant des heures. – Steve

6

très curieux que la bande-tags ne fonctionne pas ....

peut-être votre "<p>" est encodée htmlentity-? comme "& lt; p & gt;" (Jetez un oeil à la page de l'sourcecode)

otehrwise ce remplacera tous les tags, aussi les htmlentity codés, mais il est presque évident que cette balise p est simplement htmlentity codé essayez donc que la première ...

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

Dans mon cas, je devrais utiliser htmlspecialchars_decode($str);. html_entity_decode($firstArticle->introtext) ne semble pas fonctionner pour moi. Je dois d'abord utiliser htmlentities en premier.

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