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

Статус
В этой теме нельзя размещать новые ответы.

avgaz

Участник
Регистрация
18 Окт 2006
Сообщения
189
Реакции
7
Собствено вопрос в следующем как с помощь php удалить html код из строки
например имеется строка
Код:
<p><b>как</b> жизнь <font color="#FF0000">уважаемы</font> колеги</p>
как удалить все html теги что бы текст был просто
Код:
как жизнь уважаемы колеги
 
Для просмотра ссылки Войди или Зарегистрируйся -- как раз для вас функция strip_tags, можно все теги срубать, а можно часть оставить.
 
еще для универсальности можно сделать html_entity_decode() -- это декодирует символы типа &nbsp;
 
Да, кстати, html_entity_decode - очень нужен, если тянуть html-код из rss, там же все закодировано в html entity, поэтому надо делать:

$string_out = strip_tags(html_entity_decode($string_in));
 
Cм. пример на Для просмотра ссылки Войди или Зарегистрируйся
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
и Для просмотра ссылки Войди или Зарегистрируйся
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 в теги и уже потом их убирать. Действия идут изнутри наружу - попробуй, что сам написал. Правильно, как я приводил.
 
как показала практика strip_tags не очень хорошо работает и не удаляет стили, скрипты...
Лучше все таки через регулярные выражения делать. Я написал функцию, но еще тестирую... если будет хорошо работать, то выложу
 
А как лучше - все с самого начала регулярками прасить или уже после strip_tags дочищать?
 
Вот так можно все удалить:
PHP:
$search = array ("'<script[^>]*?>.*?</script>'si",  // Вырезается javascript
                 "'<[\/\!]*?[^<>]*?>'si"           // Вырезаются html-тэги
				 );

$replace = array ("",
                  ""
				 );
Ну и дальше сделать preg_replace, выбрав нужное.
 
Вот самая универсальная функция, и после нее не нужно ничего дочищать:
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
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху