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

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Stanislav
Сообщения: 3
Зарегистрирован: 13 дек 2004, 23:03
Откуда: Пермь

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

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

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

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

И так на любой тег.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Вообще обычно их экранируют при выводе с помошью htmlentities(), htmlspecialchars() etc.
То есть записываешь в MySQL базу весь пользовательский ввод без изменений
(разве что смотришь на соответствие логике приложения),
но при выводе все html-теги экранируешь.
2B OR NOT(2B) = FF
_Gemini
Сообщения: 17
Зарегистрирован: 28 дек 2004, 14:59
Откуда: Ростов-на-Дону
Контактная информация:

Stanislav, вероятно придется писать функцию самому - а вырезать теги с помощью регулярных выражений. Если нужно просто не отображать теги действуй как подсказал Absurd
Zvepr
Сообщения: 48
Зарегистрирован: 23 дек 2004, 14:34

Вообще, мне вот интересно, зачем это так развращаться?))) не буду писать скрипт, но подскажу алгоритм (ниче, дареному коню в зубы не смотрят!)
//если тэг открывается...
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);


гарантий нет - даже не проверял... но попробуй! основное уже готова! на блюдичке с голубой каемочкой!))))))
Dmitryy
Сообщения: 1
Зарегистрирован: 24 янв 2005, 18:22

Какие проблемы?Есть же готовая ф-я
strip_tags - вырезает тэги HTML и PHP из строки
Описание
string strip_tags (string str [, string allowable_tags])
Koral
Сообщения: 1
Зарегистрирован: 11 мар 2005, 13:15
Контактная информация:

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

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

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