Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

strip_tags_smart: корректный аналог strip_tags() (Rin)
Автор Сообщение
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Ср Фев 22, 2006 3:04 pm (написано за 22 минуты 11 секунд)
   Заголовок сообщения: strip_tags_smart: корректный аналог strip_tags()
Ответить с цитатой

Более продвинутый аналог strip_tags() для корректного вырезания тагов из html кода.
Функция strip_tags(), в зависимости от контекста, может работать не корректно.

Воможности:
  1. корректно обрабатываются вхождения типа "a < b > c"
  2. корректно обрабатывается "грязный" html, когда в значениях атрибутов тагов могут встречаться символы < >
  3. корректно обрабатывается разбитый html
  4. вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word таги
  5. автоматически форматируется текст, если он содержит html код
  6. защита от подделок типа: "<<fake>script>alert('hi')</</fake>script>"
.

Скачать последнюю версию strip_tags_smart() здесь

Возможно, Вам будут интересны мои другие готовые решения:
You may be interested in my other ready-made solutions:
  1. A package of PHP functions to manipulate strings encoded in UTF-8
  2. MysqlRapid
  3. TreeNS
  4. RevisionDB
  5. WordsFakeFix
  6. Yoficator
  7. TextParser
  8. FileCache
  9. PHP_MergePostFiles
  10. Table
  11. PHPTemplate
  12. Optimize
  13. Password



strip_tags_smart-4.0.14.7z
 Описание:

Скачать
 Имя файла:  strip_tags_smart-4.0.14.7z
 Размер:  2,74 KB
 Скачали:  1667 раз(а)



Последний раз редактировалось: Rin (Пт Фев 05, 2010 11:14 am), всего редактировалось 28 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7222
Карма: 218
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Фев 27, 2006 2:23 pm (спустя 4 дня 23 часа 19 минут; написано за 12 секунд)
   Заголовок сообщения:
Ответить с цитатой


М

Ветка выделена в отдельную тему «strip_tags_smart (обсуждение)»,
расположенную в форуме Разное :: PHP (27 Февраля 2006, 14:23).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Ср Мая 30, 2007 1:57 pm (спустя 1 год 3 месяца 2 дня 23 часа 34 минуты; написано за 25 секунд)
   Заголовок сообщения:
Ответить с цитатой

Всем, кто использует эту функцию, рекомендуется обновиться.
Добавлена защита от подделок типа: "<<fake>script>alert('hi')</</fake>script>"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость






Карма: 354
   поощрить/наказать


СообщениеДобавлено: Пн Июл 16, 2007 9:52 am (спустя 1 месяц 16 дней 19 часов 55 минут; написано за 29 секунд)
   Заголовок сообщения:
Ответить с цитатой

Может, имело смысл написать данный аналог на C?
Вернуться к началу
Птицъ
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Вт Авг 07, 2007 11:09 am (спустя 22 дня 1 час 16 минут; написано за 1 минуту 18 секунд)
   Заголовок сообщения:
Ответить с цитатой

Первая проверка, работает неплохо, НО не обрабатывает след. код
последний " лишний, но всё-же.
Код (html): скопировать код в буфер обмена
<script language="javascript" type="text/javascript" src="http://informer.ibcs-mail.com/informer.php?id=999"">
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Ср Авг 08, 2007 6:22 pm (спустя 1 день 7 часов 13 минут; написано за 1 минуту 7 секунд)
   Заголовок сообщения:
Ответить с цитатой

Спасибо за замечание.
Я добавил корректную обработку разбитого HTML кода.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
MaxF
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Ср Окт 17, 2007 2:06 pm (спустя 2 месяца 8 дней 19 часов 43 минуты; написано за 1 минуту 5 секунд)
   Заголовок сообщения:
Ответить с цитатой

Warning: preg_replace_callback() requires argument 2, 'strip_tags_smart', to be a valid callback in ...

не подскажете, в чем причина ругни?
функцию не изменял, как есть 4.0.3 вставил в свой код и вот что получаю при вызове
для строки <b>MaxF
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Чт Окт 18, 2007 11:18 am (спустя 21 час 12 минут; написано за 1 минуту 18 секунд)
   Заголовок сообщения:
Ответить с цитатой

Очень странная ошибка, у Вас PHP вообще нормально работает?
Попробуйте поставить более новую версию (5.2.x)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
resistance
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Пн Ноя 12, 2007 3:39 pm (спустя 25 дней 4 часа 20 минут; написано за 2 минуты 27 секунд)
   Заголовок сообщения:
Ответить с цитатой

MaxF писал(а):
Warning: preg_replace_callback() requires argument 2, 'strip_tags_smart', to be a valid callback in ...

не подскажете, в чем причина ругни?
функцию не изменял, как есть 4.0.3 вставил в свой код и вот что получаю при вызове
для строки <b>MaxF
если функция является методом класса, то строчку
Код (php): скопировать код в буфер обмена
$s2 = preg_replace_callback($re_tags, __FUNCTION__, $s2);
надо заменить на
Код (php): скопировать код в буфер обмена
$s2 = preg_replace_callback($re_tags, array('self', 'strip_tags_smart'), $s2);
Вернуться к началу
сэрйога
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Вт Ноя 20, 2007 2:30 pm (спустя 7 дней 22 часа 51 минуту; написано за 34 секунды)
   Заголовок сообщения:
Ответить с цитатой

Хм... Классно, только форматирование блоков <pre> ломается. Не надо бы из них переводы строки убирать...
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Ср Янв 16, 2008 5:19 pm (спустя 1 месяц 26 дней 2 часа 49 минут; написано за 6 секунд)
   Заголовок сообщения:
Ответить с цитатой

4.0.5 Добавлена корректная обработка содержимого тагов <pre></pre>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Paul_Codiny
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Чт Фев 07, 2008 6:48 pm (спустя 22 дня 1 час 28 минут; написано за 17 секунд)
   Заголовок сообщения:
Ответить с цитатой

давно пора было сказать спасибо;)
Вернуться к началу
just4fun
Заглянувший



Зарегистрирован: 16.12.2004
Сообщ.: 3
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Пт Фев 08, 2008 8:55 pm (спустя 1 день 2 часа 6 минут; написано за 1 минуту 16 секунд)
   Заголовок сообщения:
Ответить с цитатой

дкЛаб на весь рунет работает. За все спасибо забанят как спамера :)
Спасибо дкЛаб!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Пт Фев 08, 2008 10:22 pm (спустя 1 час 27 минут; написано за 11 секунд)
   Заголовок сообщения:
Ответить с цитатой

Спасибо! :)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
KonstRuctor
Заглянувший



Зарегистрирован: 22.05.2006
Сообщ.: 7
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Чт Мар 27, 2008 3:10 am (спустя 1 месяц 18 дней 4 часа 48 минут; написано за 1 минуту 8 секунд)
   Заголовок сообщения:
Ответить с цитатой

Почему-то выдает ошибку
Parse error: parse error, unexpected T_ARRAY, expecting '&' or T_VARIABLE or T_CONST in z:\home\site\www\inc\strip_tags_smart.php on line 33

Вызываю $a = strip_tags_smart($a);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Чт Мар 27, 2008 10:23 am (спустя 7 часов 12 минут; написано за 12 секунд)
   Заголовок сообщения:
Ответить с цитатой

Функция работает в PHP5.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
KonstRuctor
Заглянувший



Зарегистрирован: 22.05.2006
Сообщ.: 7
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Чт Мар 27, 2008 3:04 pm (спустя 4 часа 41 минуту; написано за 34 секунды)
   Заголовок сообщения:
Ответить с цитатой

Обидно-досадно... будем юзать пока обычный strip_tags.
Счастье было близко
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
eternalko
Участник форума



Зарегистрирован: 06.01.2008
Сообщ.: 28
Карма: 0
   поощрить/наказать


СообщениеДобавлено: Вт Апр 01, 2008 10:18 pm (спустя 5 дней 7 часов 13 минут; написано за 36 секунд)
   Заголовок сообщения:
Ответить с цитатой

Спасибо (:
Неплохой аналог ;)
http://www.phpclasses.org/browse/package/2189.html
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Blagotvor
Участник форума
Предупреждений: 1


Зарегистрирован: 17.10.2007
Сообщ.: 20
Карма: -2
   поощрить/наказать

Откуда: Россия, пос. Белоомут

СообщениеДобавлено: Вт Июл 01, 2008 1:58 pm (спустя 2 месяца 29 дней 15 часов 39 минут; написано за 3 минуты 28 секунд)
   Заголовок сообщения:
Ответить с цитатой

что-то разрешенные теги не пашут как надо! к примеру, есть текст вида:
Код (html): скопировать код в буфер обмена
<p style="text-align: justify;">При составлении описания для ссылки, постарайтесь составить полноценную статью характеризующую страницу, которая принадлежит публикуемой ссылке. Будьте предельно грамотны и внимательны к мелочам, тщательно проверяйте набранный текст, используйте теги <strong>bbCode</strong> для форматирования. В случае безответственного отношения к составлению описания для ссылок, Вам будет отказано в их активации! <span style="text-decoration: underline;">Минимально допустимое</span> количество слов в описании 50.</p>
имеем в конфигурации ($conf) список допустимых тегов "p,a,img,table,center,span,strong". вызываем функцию:
Код (php): скопировать код в буфер обмена
$atags = explode(',', $сonf['allow_tags']);
$message = strip_tags_smart($message, $atags);
на выходе получается:
Код (html): скопировать код в буфер обмена
<p style="\">При составлении описания для ссылки, постарайтесь составить полноценную статью характеризующую страницу, которая принадлежит публикуемой ссылке. Будьте предельно грамотны и внимательны к мелочам, тщательно проверяйте набранный текст, используйте теги <strong>bbCode</strong> для форматирования. В случае безответственного отношения к составлению описания для ссылок, Вам будет отказано в их активации! <span style="\">Минимально допустимое</span> количество слов в описании 50.</p>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Ср Окт 15, 2008 11:39 am (спустя 3 месяца 13 дней 21 час 41 минуту; написано за 52 секунды)
   Заголовок сообщения:
Ответить с цитатой

Последние изменения strip_tags_smart() здесь
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Golovoed
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Ср Июл 22, 2009 11:39 pm (спустя 9 месяцев 7 дней 12 часов 16 секунд; написано за 53 секунды)
   Заголовок сообщения:
Ответить с цитатой

HTML Код
Код (html): скопировать код в буфер обмена
Как сообщили в пресс-службе, <b style="color: red; font-size: 30px;">закрытие трубопровода в ходе</b> телефонного разговора обсудили вице-премьеры России и Белоруссии Игорь Сечин и Владимир Семашко.
PHP
Код (php): скопировать код в буфер обмена
$allow_tags = array('b','i','li','ol','strong','u','ul');
$a_content = strip_tags_smart($a_content,$allow_tags,false);
Код (html): скопировать код в буфер обмена
style="color: red; font-size: 30px;"
не удаляет
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Пн Авг 03, 2009 11:31 am (спустя 11 дней 11 часов 51 минуту; написано за 16 секунд)
   Заголовок сообщения:
Ответить с цитатой

Blagotvor, Golovoed скачайте последнюю версию
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Golovoed
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Ср Авг 05, 2009 3:38 pm (спустя 2 дня 4 часа 7 минут; написано за 43 секунды)
   Заголовок сообщения:
Ответить с цитатой

Rin писал(а):
Blagotvor, Golovoed скачайте последнюю версию
это в последней версии так
файл utf8_functions_2009-06-24.7z
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Ср Авг 05, 2009 6:55 pm (спустя 3 часа 16 минут; написано за 32 секунды)
   Заголовок сообщения:
Ответить с цитатой

загрузите файл в этой теме
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
evol
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Чт Сен 03, 2009 11:58 pm (спустя 29 дней 5 часов 3 минуты; написано за 4 минуты 4 секунды)
   Заголовок сообщения: Проблема обработки object+embed
Ответить с цитатой

Пару замечаний к отличной функции strip_tags_smart:
1. Некорректно вырезается код вставки плееров из тытрубы и аналогов. Пример:
Код (html): скопировать код в буфер обмена
<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/21b7f280d33f3350663ba451372bd5c5"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="http://video.rutube.ru/21b7f280d33f3350663ba451372bd5c5" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" ></EMBED></OBJECT>
...мочится начисто при вызове:
Код (php): скопировать код в буфер обмена
$s=strip_tags_smart( stripslashes( $values['body'] ), array("br", "i", "b", "em", "u", "sup", "sub", "a", "strike", "hr", "p", "object", "embed", "ol", "ul", "li", "dl", "dt", "dd", "table", "tbody", "thead", "tr", "td", "div", "img", "cite", "big", "font", "span", "h1", "h2", "h3", "h4", "h5", "h6", "small", "strong", "th", "abbr", "acronym", "blockquote", "caption", "code", "col", "colgroup", "del", "dfn", "ins", "kbd", "label", "nobr", "param", "pre", "q", "tbody", "tt", "var", "tfoot") );
2. Не учитывается закрытость-открытость тега. Это скорее не проблема, а недостающая фича. Если пост в форум-блог-комментарий допускает Р или А, то отсутствие его пары выворачивает наизнанку оставшееся в живых.
Мы если напишем парсер, поможем сообществу и кинем, но а вдруг уже есть?
Спасибо за полезную функцию
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Сб Сен 05, 2009 2:08 pm (спустя 1 день 14 часов 10 минут; написано за 5 минут 40 секунд)
   Заголовок сообщения:
Ответить с цитатой

Ваше жаргонное сообщение непонятно.
Сообщение об ошибке пишется примерно так:
1) краткое описание ошибки
2) пример PHP скрипта
3) актуальные данные на входе
4) актуальные данные на выходе
5) ожидаемые данные на выходе
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
CoooLLer
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Пт Сен 11, 2009 4:59 pm (спустя 6 дней 2 часа 50 минут; написано за 40 секунд)
   Заголовок сообщения:
Ответить с цитатой

Возможно ли доработать функцию чтобы некоторые атрибуты тегов не удалялись, например colspan rowspan у тегов td tr?
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Пт Сен 11, 2009 8:55 pm (спустя 3 часа 55 минут; написано за 21 секунду)
   Заголовок сообщения:
Ответить с цитатой

Возможно, но не при моём участии :)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
misha_2002
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Ср Сен 16, 2009 9:37 pm (спустя 5 дней 42 минуты; написано за 2 минуты 27 секунд)
   Заголовок сообщения:
Ответить с цитатой

За скрипт спасибо.

Но у меня такая же проблема, как у Golovoed и Blagotvor.

Не удаляет "style" из ссылок.

Скачивал скрипт из этой темы, а также отсюда http://forum.dklab.ru/viewtopic.php?t=17146 ...

Текст у меня в кодировке Windows-1251 (если это имеет значение).
Вернуться к началу
misha_2002
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Ср Сен 16, 2009 10:08 pm (спустя 31 минуту; написано за 1 минуту 31 секунду)
   Заголовок сообщения:
Ответить с цитатой

Разобрался.

В комментарии все написано...
"Пример: 'b' -- таг останется с атрибутами, '<b>' -- таг останется без атрибутов"

Правда, из ссылок удаляется всё, остается только <a>текст ссылки</a> :)
Вернуться к началу
Гость






Карма: 354
   поощрить/наказать


СообщениеДобавлено: Пт Сен 18, 2009 5:41 pm (спустя 1 день 19 часов 32 минуты; написано за 23 минуты 58 секунд)
   Заголовок сообщения: Re: strip_tags_smart: корректный аналог strip_tags()
Ответить с цитатой

Rin писал(а):
Более продвинутый аналог strip_tags() для корректного вырезания тагов из html кода.
Правильно писать тег, теги, тегов, тега.

Я терпеть не могу маразматическое исключение, когда буква е не смягчает согласную, но все же это правило русского языка.


А скрипт хороший, спасибо :-)
Вернуться к началу
Гость






Карма: 354
   поощрить/наказать


СообщениеДобавлено: Ср Янв 13, 2010 11:23 pm (спустя 3 месяца 25 дней 5 часов 42 минуты; написано за 1 минуту 3 секунды)
   Заголовок сообщения:
Ответить с цитатой

Из-за чего может быть такая ошибка?

preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Compilation failed: unrecognized character follows \ at offset 1227 in file /_admin/core/lib/strip_tags_smart.php line 163



strip_tags_smart($body, array('p','br','b','strong','i','em','u','ol','ul','li','a','img','sub','sup','strike'));
на вход передаю примитивное "xxxx"
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Чт Янв 14, 2010 12:09 am (спустя 46 минут; написано за 22 секунды)
   Заголовок сообщения:
Ответить с цитатой

старая версия PCRE, обновите PHP или PCRE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость






Карма: 354
   поощрить/наказать


СообщениеДобавлено: Чт Янв 14, 2010 8:04 am (спустя 7 часов 54 минуты; написано за 48 секунд)
   Заголовок сообщения:
Ответить с цитатой

А какие у скрипта минимальные требования по PHP и PCRE?
Какие версии ставить
Вернуться к началу
Rin
Участник форума



Зарегистрирован: 01.06.2005
Сообщ.: 463
Карма: 120
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Пн Янв 18, 2010 12:18 am (спустя 3 дня 16 часов 13 минут; написано за 12 секунд)
   Заголовок сообщения:
Ответить с цитатой

PCRE 7.2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость
Гость





Карма: 354
   поощрить/наказать


СообщениеДобавлено: Пт Фев 05, 2010 11:01 am (спустя 18 дней 10 часов 43 минуты; написано за 18 секунд)
   Заголовок сообщения:
Ответить с цитатой

не работает с http://www.capitallinefundinggroup.com/Super_Jumbo_Mortgage_Loan.html
не вырезает и вешает систему.
Вернуться к началу
Показать сообщения:   
Начaть нoвую тeму   Ответить на тему Часовой пояс: GMT + 3 (Москва)
Страница 1 из 1   
Ответить
Имя
Тема
     

Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
    HTML ВЫКЛЮЧЕН
BBCode ВКЛЮЧЕН
Смайлики ВКЛЮЧЕНЫ
Вы можете начинать темы. Вы можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать в опросах. Вы не можете прилагать файлы к сообщениям. Вы можете скачивать файлы.
Для бизнеса регистрация чп от Алексус!
  XML