Страница 1 из 1

Вырезка НТМL тегов в PHP

Добавлено: 20 дек 2004, 23:19
Stanislav
Есть ли в PHP функция для того чтобы из текста вырезать HTML-теги.
Например есть такой текст:

Текст текст[img]pics/fon.gif[/img]текст текст

после срабатывания функции остается:

Текст тексттекст текст

И так на любой тег.

Добавлено: 21 дек 2004, 09:05
Absurd
Вообще обычно их экранируют при выводе с помошью htmlentities(), htmlspecialchars() etc.
То есть записываешь в MySQL базу весь пользовательский ввод без изменений
(разве что смотришь на соответствие логике приложения),
но при выводе все html-теги экранируешь.

Добавлено: 29 дек 2004, 22:19
_Gemini
Stanislav, вероятно придется писать функцию самому - а вырезать теги с помощью регулярных выражений. Если нужно просто не отображать теги действуй как подсказал Absurd

Добавлено: 31 дек 2004, 01:09
Zvepr
Вообще, мне вот интересно, зачем это так развращаться?))) не буду писать скрипт, но подскажу алгоритм (ниче, дареному коню в зубы не смотрят!)
//если тэг открывается...
while($tagOpener=strpos($file, '<')!==false){
//ОБЯЗАТЕЛЬНО ТАКУЮ ПРОВЕРКУ !==false, иначе может быть позиция символа открытия тега 0=>while(false) - очень кстати частая ошибка новичков!

//..и закрывается
if($tagCloser=strpos($file,'>',$tagOpener)){

//вырезаем от начала файла до открытия тэга
$before=substr($file,0,$tagOpener);
//вырезаем после закрытия файла и до конца, те (strlen($file)-$tagCloser) символов
$after=substr($file,$tagCloser+1,(strlen($file)-$tagCloser));
//а потом склеиваем от и до, пропуская сам тэг!
$file=$before.$after;


//если же тэг не закрыт
}else{

//просто жестко мочканем этот символ < и заменем его на пробел
$file[$tagOpener]=' ';
}
}

//после вот такой чудной обработачки у нас остается в тексте
//только закрыватели тэгов>, которые (тэги), даже не были открыты
//просто берем и.... ОПЯТЬ ЖЕ ЖЕСТКО МОЧИМ!
$file=str_replace('>', ' ', $file);


гарантий нет - даже не проверял... но попробуй! основное уже готова! на блюдичке с голубой каемочкой!))))))

Есть готовая функция strip_tags

Добавлено: 24 янв 2005, 18:31
Dmitryy
Какие проблемы?Есть же готовая ф-я
strip_tags - вырезает тэги HTML и PHP из строки
Описание
string strip_tags (string str [, string allowable_tags])

Добавлено: 11 мар 2005, 14:03
Koral
Проблема в том что string strip_tags оставляет спецсимволы и всякий мусор типа &nbsp, и нетолько а также в некоторых случаях не удаляется текст между скобками < > (пример тому тег <a href = >) . Эту функцию нужно использовать после так сказать "основной резки". Т.е. вначале удаляем теги регулярными выражениями а затем только ее применяем.

Zvepr, Незнаю твой алгоритм вызывает сомнения. Т.к. во всей документации ставится акцент на том что для анализа строк нужно в первую очередь использовать именно регулярные выражения, а не функции strpos strreplace и операции конкатенации. И я с ними согласен, т.к. при написании подобного скрипта я вначале пользовался данными функциями. В результате! В некоторых случаях с некоторыми страницами скрипт, выполнялся от 2-3 мин. и более, а также были случаи зависания. При этом была 100% загрузка процессора. В рез. админу хостера приходилось перегружать сервак. Мне пришлось переписывать все под регуляные выражения. В результате скрипт стал гораздо быстрее выполняться я бы сказал раз в 10. Случай зависания был только раз и то из-за бага в самих функциях рег. выражений.. Баг исправился просто сменой более нового релиза PHP.

Добавлено: 15 мар 2005, 15:57
UUU
Насчет зависания :-) На перле столкнулся один раз, используя пример из перлдока. Когда стал ковырять, в каком месте затык - оказалось - в коде счетчика. Мало того, что эти счетчикописатели стандарты не ддержат, так еще и пишут неправильно. :-)