Как удалить html теги?

Тема в разделе "PHP", создана пользователем avgaz, 7 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. avgaz

    avgaz

    Регистр.:
    18 окт 2006
    Сообщения:
    188
    Симпатии:
    6
    Собствено вопрос в следующем как с помощь php удалить html код из строки
    например имеется строка
    Код:
    <p><b>как</b> жизнь <font color="#FF0000">уважаемы</font> колеги</p>
    как удалить все html теги что бы текст был просто
    Код:
    как жизнь уважаемы колеги
     
  2. ttx

    ttx

    Регистр.:
    15 мар 2007
    Сообщения:
    187
    Симпатии:
    36
    avgaz нравится это.
  3. painsource

    painsource Постоялец

    Регистр.:
    13 июл 2009
    Сообщения:
    64
    Симпатии:
    8
    еще для универсальности можно сделать html_entity_decode() -- это декодирует символы типа &nbsp;
     
    ttx и avgaz нравится это.
  4. ttx

    ttx

    Регистр.:
    15 мар 2007
    Сообщения:
    187
    Симпатии:
    36
    Да, кстати, html_entity_decode - очень нужен, если тянуть html-код из rss, там же все закодировано в html entity, поэтому надо делать:

    $string_out = strip_tags(html_entity_decode($string_in));
     
  5. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Только наоборот :)
    PHP:
    $string_out html_entity_decode(strip_tags($string_in));
     
  6. ttx

    ttx

    Регистр.:
    15 мар 2007
    Сообщения:
    187
    Симпатии:
    36
    Cм. пример на http://us2.php.net/manual/en/function.html-entity-decode.php
    PHP:
    $orig "I'll \"walk\" the <b>dog</b> now";
    $a htmlentities($orig);
    $b html_entity_decode($a);
    echo 
    $a// I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now
    echo $b// I'll "walk" the <b>dog</b> now
    и http://us2.php.net/manual/en/function.strip-tags.php
    PHP:
    <?php
    $text 
    '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
    echo 
    strip_tags($text);
    echo 
    "\n";
    // Allow <p> and <a>
    echo strip_tags($text'<p><a>');
    ?>
    Сначала надо преобразовать закодированные html entity в теги и уже потом их убирать. Действия идут изнутри наружу - попробуй, что сам написал. Правильно, как я приводил.
     
  7. painsource

    painsource Постоялец

    Регистр.:
    13 июл 2009
    Сообщения:
    64
    Симпатии:
    8
    как показала практика strip_tags не очень хорошо работает и не удаляет стили, скрипты...
    Лучше все таки через регулярные выражения делать. Я написал функцию, но еще тестирую... если будет хорошо работать, то выложу
     
  8. ttx

    ttx

    Регистр.:
    15 мар 2007
    Сообщения:
    187
    Симпатии:
    36
    А как лучше - все с самого начала регулярками прасить или уже после strip_tags дочищать?
     
  9. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Вот так можно все удалить:
    PHP:
    $search = array ("'<script[^>]*?>.*?</script>'si",  // Вырезается javascript
                     
    "'<[\/\!]*?[^<>]*?>'si"           // Вырезаются html-тэги
                     
    );

    $replace = array ("",
                      
    ""
                     
    );
    Ну и дальше сделать preg_replace, выбрав нужное.
     
  10. painsource

    painsource Постоялец

    Регистр.:
    13 июл 2009
    Сообщения:
    64
    Симпатии:
    8
    Вот самая универсальная функция, и после нее не нужно ничего дочищать:
    PHP:
    function getTextFromHTML($htmlText)
    {
        
    $search = array ("'<script[^>]*?>.*?</script>'si",  // Remove javaScript 
                 
    "'<style[^>]*?>.*?</style>'si",  // Remove styles 
                 
    "'<xml[^>]*?>.*?</xml>'si",  // Remove xml tags 
                 
    "'<[\/\!]*?[^<>]*?>'si",           // Remove HTML-tags 
                 
    "'([\r\n])[\s]+'",                 // Remove spaces
                 
    "'&(quot|#34);'i",                 // Replace HTML special chars
                 
    "'&(amp|#38);'i"
                 
    "'&(lt|#60);'i"
                 
    "'&(gt|#62);'i"
                 
    "'&(nbsp|#160);'i"
                 
    "'&(iexcl|#161);'i"
                 
    "'&(cent|#162);'i"
                 
    "'&(pound|#163);'i"
                 
    "'&(copy|#169);'i"
                 
    "'&#(\d+);'e");                    // write as php

        
    $replace = array (""
                          
    ""
                          
    "",
                          
    "",
                          
    "\\1"
                          
    "\""
                          
    "&"
                          
    "<"
                          
    ">"
                          
    " "
                          
    chr(161), 
                          
    chr(162), 
                          
    chr(163), 
                          
    chr(169), 
                          
    "chr(\\1)"); 
        
        return 
    preg_replace($search$replace$htmlText);
    }
     
    ttx нравится это.
Статус темы:
Закрыта.