Об удалении тегов

Статья профессионального программиста из Aiken WDS

Рубрика Программирование, компьютеры и кибернетика
Вид
Язык русский
Дата добавления 19.02.2002
Размер файла 5,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Об удалении тегов

Олег Алистратов, www.ali.com.ua

Удивительно много мифов владеет умами человечества. Древние сушили балду над задачами об удвоении куба и трисекции угла. Позднее вошли в моду поиски философского камня и отбирание у сарацинов гроба Господня. В новое время занимались исследованием флогистона, эфира и обезьяньих желез. Довольно долго пытались решить проблему установления счастья для всех -- в одном отдельно взятом государстве. С появлением веб-технологий у людей нашлась новая погремушка -- удаление тегов.

Как известно, документ на HTML состоит из двух вещей: текста как такового и тегов, задающих его структуру. Мухи отдельно, котлеты отдельно. Теги используются также для оформления текста, и этим часто злоупотребляют новички, заставляя негодовать суровых именитых дизайнеров. Но какие теги использовать, сколько и каким образом -- личное дело каждого. И пока это остается вашим личным делом, все в порядке.

Но вот веб-мастер пожелал иметь на своем сайте чат или форум. Или, кто попроще, гостевую книгу. Или, кто посерьезней, страницу обратной связи. Суть в том, что он теперь не распоряжается единолично наполнением контента своего сайта -- контент, в большей или меньшей степени, формируют посетители.

Посетитель же имеет вредную склонность писать в поля форм всякую ерунду. Просто так ерунду писать он не будет -- только время зря тратить. Если же посетитель технически грамотен и тяготеет к хулиганству -- ловко орудуя этими самыми тегами и java-скриптами, он будет набивать вашу гостевую книгу (или что вы там поставили) похабными надписями и картинками. Зловредные теги из сообщений посетителей следует удалять, оставляя только кристально чистый текст.

Поэтому ньюс-группы и эхоконференции полны письмами под топиками "Как убрать теги??!!". Содержание их всегда одинаково, отличаются они только количеством вопросительных знаков в заголовке. Письма эти порождают массу ответов с очевидным решением -- убрать все от левой угловой скобки до следующей за ней правой, благо в HTML запрещены конструкции вида

<tagA ... <tagB> ...>

(впрочем, вру, возможно

<!-- <img...> -->

такое), и тогда регэксп (регулярное выражение, regular expression)

s/<([^>]|\n)*>//g

сработает нужным образом. Однако знатоки HTML сразу бьют мощным аргументом:

<input type="submit" value="Next >>>">

Ясно, что этот совершенно правильный с точки зрения HTML тег описанная процедура удалит только частично, оставив невразумительный мусор. Корифеи приводят следующего монстра регулярных выражений:

s/<[A-za-z]([^'">]*['"][^'"]*?['"])*[^>]*>//sig

Правда, и в этом случае остаются проблемы. Но регэкспы вообще, а особенно те, что сложнее замены одной буквы на другую, смущают начинающих программистов. Не зная сути, легко допустить ошибку. Но дело не в этом...

Отвлечемся от регулярных выражений, и посмотрим на проблему внимательно. "Мы должны понимать всю глубину наших глубин © Дикий прапор, ДМБ". Надо ли вообще удалять теги? А если эту статью, которую вы читаете, кто-то хочет опубликовать на форуме? Я так тщательно отбирал эти примеры, так долго подбирал этот сине-зелененький цвет... Обидно будет отправить их к индейскому Маниту, в /dev/null, или куда там отправляются вырезанные регэкспами части текста.

Двух секунд раздумья веб-мастеру достаточно, чтобы убедиться: в большинстве случаев теги нужно не удалять, а показывать. Достичь этого просто: следует заменить в исходном тексте символы, используемые в тегах, на соответствующие подстановки-"энтити" (entities). Удалять же теги нужно в случае преобразования HTML в обычный текст, и для этого лучше воспользоваться подходящими библиотеками (например, модулем HTML::Parser для Перла).

Однако и с "энтитями" не все так просто. Основной вопрос -- когда осуществлять подстановку. Перед сохранением данных на сервере или перед формированием страницы, и важно не сделать это дважды. До тех пор, пока я серьезно задумался над этим вопросом (ведь все казалось так элементарно! ...оно и есть элементарно, но нужна аккуратность), полная несогласованность в обработке тегов скриптами приводила к тому, что теги появлялись где не нужно, исчезали там, где нужны, а кавычки и амперсанды превращались во что-то непонятное. Если данные отдавались для повторного редактирования в форму, переводы строк должны оставаться на своих местах; а на форуме их лучше заменить на тег
. В общем, стоило только чуть-чуть подумать. Через пять минут появилась методика, которая больше меня никогда не подводила. Вот она:

1. Все данные, введенные посетителем, оставлять без изменений и "как есть" заносить их в базу данных или в файл.
2. Так их и хранить.
3. Преобразовывать их только перед выводом на страницу. Для этого заменяем сначала амперсанд, а затем кавычки и угловые скобки на "энтити".
4. Если не выводим в поле типа textarea, дополнительно заменяем переводы строк на тег <br>.

Все. Вот функция замены на Перле:

sub html_chars

{

my ($r, $br) = @_;

$r =~ s/&/&amp;/gs;

$r =~ s/"/&quot;/gs;

$r =~ s/</&lt;/gs;

$r =~ s/>/&gt;/gs;

$r =~ s/\n/<br>/gs if $br;

return $r;

}

Она принимает два параметра: обязательный -- текст (скаляр), подлежащий преобразованию, и необязательный флажок (любого типа, ненулевой и непустой), показывающий, делать ли преобразование переводов строк.

Итак, я советую вам определиться -- собираетесь ли вы удалять теги в присланных данных. Если нет, то разберитесь раз и навсегда, как и когда подавлять их перед выводом страницы пользователю. И тогда вы просветлеете обликом и наполните свою жизнь смыслом еще на 18 процентов...

Искренне Ваш,
Олег Алистратов, Aiken WDS.


Подобные документы

  • Изучение тегов для создания списков и таблиц в HTML, основных атрибутов тегов. Практические навыки создания списков и таблиц в HTML-документах. Нумерованные, маркированные и вложенные списки, список определений. Выравнивание данных в ячейках таблицы.

    контрольная работа [322,1 K], добавлен 09.08.2014

  • Описание языка html. Анализ IT инфраструктуры, обоснование выбора используемой системы. Характеристика условий труда программиста на предприятии. Организация рабочего места инженера-программиста методом сокращения затрат вспомогательного времени.

    дипломная работа [1,7 M], добавлен 21.06.2014

  • Создание автоматизированного рабочего места подготовки управляющих программ для станков с ЧПУ. Технологическая сущность и формализация алгоритма задачи; техническое и программное обеспечение АРМ. Организация оптимальных условий труда программиста; смета.

    дипломная работа [2,4 M], добавлен 22.05.2013

  • Разработка программы на языке Visual Basic. Спецификация на программный модуль. Ввод, изменение и удаление данных по определенным требованиям. Руководство системного программиста, программиста и оператора. Ведение базы данных в виде таблицы Excel.

    курсовая работа [272,5 K], добавлен 21.04.2014

  • Режим работы, структура и функциональные задачи ГБОУ АО СПО "Астраханский промышленный колледж". Должностные инструкции техника, оператора, системного программиста. Аппаратное обеспечение и сетевые ресурсы учреждения. Требования к технике безопасности.

    отчет по практике [792,5 K], добавлен 10.06.2014

  • Обробка інформації. Формат мр3. Створення, або редагування мр3 тегов за допомогою програми Tag Reader. Уніфікована мова моделювання. Графічні діаграми UML. Діаграма діяльності, послідовності, кооперації, компонентів, розгортання. Програмне забезпечення.

    курсовая работа [91,5 K], добавлен 22.09.2008

  • Фреймы, дающие возможность разбить окно браузера на несколько прямоугольных областей, в каждой из которых может отображаться отдельный документ (HTML и другие). Их использование, пропорциональные размеры, атрибуты и навигация. Вложение тегов "frameset".

    презентация [460,9 K], добавлен 21.08.2013

  • Каскадные Таблицы Стилей (CSS). Возможности для работы со шрифтами. Расширение свойств тегов. Способы определения стилей форматирования. Классы и идентификаторы. Работа со шрифтами. Свободное позиционирование элементов. Свойства блоков текста.

    реферат [129,5 K], добавлен 17.11.2008

  • Среда редактирования HTML. Возможности CSS или создание шаблона web-дизайна. Осмысление тегов

    &. Создание таблиц стилей. Связка базы данных с сайтом. Создание формы авторизации. Возможность создания самых разнообразных локальных приложений.

    отчет по практике [1,9 M], добавлен 09.03.2016

  • Создание базы данных в phpMyAdmin. Создание веб сайта с подключением к базе данных. Значения тегов, используемых в программе. Заголовки, служащие для выделения логических частей текста. Тэги для формирования списков. Параметры графического изображения.

    курсовая работа [1,6 M], добавлен 18.12.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.