Есть ли в PHP функция для того чтобы из текста вырезать HTML-теги.
Например есть такой текст:
Текст текст[img]pics/fon.gif[/img]текст текст
после срабатывания функции остается:
Текст тексттекст текст
И так на любой тег.
Вырезка НТМL тегов в PHP
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Вообще обычно их экранируют при выводе с помошью htmlentities(), htmlspecialchars() etc.
То есть записываешь в MySQL базу весь пользовательский ввод без изменений
(разве что смотришь на соответствие логике приложения),
но при выводе все html-теги экранируешь.
То есть записываешь в MySQL базу весь пользовательский ввод без изменений
(разве что смотришь на соответствие логике приложения),
но при выводе все html-теги экранируешь.
2B OR NOT(2B) = FF
Вообще, мне вот интересно, зачем это так развращаться?))) не буду писать скрипт, но подскажу алгоритм (ниче, дареному коню в зубы не смотрят!)
//если тэг открывается...
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);
гарантий нет - даже не проверял... но попробуй! основное уже готова! на блюдичке с голубой каемочкой!))))))
//если тэг открывается...
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 - вырезает тэги HTML и PHP из строки
Описание
string strip_tags (string str [, string allowable_tags])
strip_tags - вырезает тэги HTML и PHP из строки
Описание
string strip_tags (string str [, string allowable_tags])
Проблема в том что string strip_tags оставляет спецсимволы и всякий мусор типа  , и нетолько а также в некоторых случаях не удаляется текст между скобками < > (пример тому тег <a href = >) . Эту функцию нужно использовать после так сказать "основной резки". Т.е. вначале удаляем теги регулярными выражениями а затем только ее применяем.
Zvepr, Незнаю твой алгоритм вызывает сомнения. Т.к. во всей документации ставится акцент на том что для анализа строк нужно в первую очередь использовать именно регулярные выражения, а не функции strpos strreplace и операции конкатенации. И я с ними согласен, т.к. при написании подобного скрипта я вначале пользовался данными функциями. В результате! В некоторых случаях с некоторыми страницами скрипт, выполнялся от 2-3 мин. и более, а также были случаи зависания. При этом была 100% загрузка процессора. В рез. админу хостера приходилось перегружать сервак. Мне пришлось переписывать все под регуляные выражения. В результате скрипт стал гораздо быстрее выполняться я бы сказал раз в 10. Случай зависания был только раз и то из-за бага в самих функциях рег. выражений.. Баг исправился просто сменой более нового релиза PHP.
Zvepr, Незнаю твой алгоритм вызывает сомнения. Т.к. во всей документации ставится акцент на том что для анализа строк нужно в первую очередь использовать именно регулярные выражения, а не функции strpos strreplace и операции конкатенации. И я с ними согласен, т.к. при написании подобного скрипта я вначале пользовался данными функциями. В результате! В некоторых случаях с некоторыми страницами скрипт, выполнялся от 2-3 мин. и более, а также были случаи зависания. При этом была 100% загрузка процессора. В рез. админу хостера приходилось перегружать сервак. Мне пришлось переписывать все под регуляные выражения. В результате скрипт стал гораздо быстрее выполняться я бы сказал раз в 10. Случай зависания был только раз и то из-за бага в самих функциях рег. выражений.. Баг исправился просто сменой более нового релиза PHP.
Насчет зависания :-) На перле столкнулся один раз, используя пример из перлдока. Когда стал ковырять, в каком месте затык - оказалось - в коде счетчика. Мало того, что эти счетчикописатели стандарты не ддержат, так еще и пишут неправильно. :-)