Почему не работает strip_tags в PHP? - PullRequest
15 голосов
/ 23 сентября 2010

У меня есть следующий код:

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

Где $ firstArticle является объектом 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

Вы можете видеть, что $ firstArticle-> introtext ссылается на строку:

"<p> Этим летом гигантский кусок льда оторвался от ледника Петерманн на северо-западной стороне Гренландии. Его площадь составляет почти 100 квадратных миль (260 кв. Км), что в четыре раза превышает Манхэттен, th "

Тег <p> является проблемой для меня в этом приложении, однако strip_tags категорически отказывается удалить его, и я не могу понять, почему.Я на самом деле отказался от strip_tags и попытался вместо этого сделать preg_replace с помощью regex /<(.|\n)*?>/:

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

Но это тоже не сработало!Как я могу удалить все теги HTML (совпадающие или нет) из этой строки при выводе?

Ответы [ 3 ]

58 голосов
/ 23 сентября 2010

попробуй:

<?php echo strip_tags(html_entity_decode($firstArticle->introtext)); ?>
6 голосов
/ 23 сентября 2010

очень любопытно, что полосы-теги не работают ....

может быть, ваш "

" закодирован htmlentity?как "

" (взгляните на исходный код страницы)

в противном случае это заменит все теги, в том числе и htmlentity-кодированные, но почти очевидно, что этот p-тег просто htmlentity-закодированэто первое ...

preg_replace('/(?:<|&lt;).*?(?:>|&gt;)/', '', $firstArticle->introtext);
1 голос
/ 18 декабря 2016

В моем случае я должен использовать htmlspecialchars_decode($str);. html_entity_decode($firstArticle->introtext), похоже, не работает для меня.

Иногда мне приходится сначала использовать htmlentities.

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