Об удалении тегов
Статья профессионального программиста из 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/&/&/gs;
$r =~ s/"/"/gs;
$r =~ s/</</gs;
$r =~ s/>/>/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