Все задачи

Не показываются смайлики :(

27 May 2013

История “как бы с башорга”:

Hett: А на перле это можно сделать так, $text =~ s/<(?:\/)?(?:html|head|body)(.*?)(?=>)/<!--$1--/g;
Hett: упс, не сюда
xxxx: а у меня не показываются эти смайлики :(
(источник)

История умалчивает, что именно хотел сделать Hett, но догадаться можно. И не только догадаться, но и найти проблемы в приведенном коде. Правда?

Разоблачение

Показать

По-видимому, хочется убрать в комментарии все html-теги html, head, body – подготовить текст для вставки в другой html-документ, или что-то в таком роде.

Явные проблемы:

1. Из текста удаляются имена тегов, но остаются (в комментариях) атрибуты. Это подозрительное поведение, пример: из <body alink=red>some text</body> получится <!-- alink=red-->some text<!----> Логичнее было бы или удалять и атрибуты тоже, или оставлять в комментарии исходный тег.

2. Игнорируются теги, открывающая и закрывающая угловые скобки которых находятся на разных строчках. Скорее всего, это неправильно. Пример: из

<body
alink=red>;
some text
</body>;

получается

<body
alink=red>;
some text
<!---->;

3. Если действительно хочется получить чистый текст с html-разметкой, то стоит удалить не только теги <head> и </head>, но и все, что окажется между ними (<title>, <meta>…)

Мораль: для по-настоящему одноразового скрипта, которым (в личных целях) будет обработан единственный файл, можно и не задумываться о таких деталях. Но если скрипт будет выполняться в настоящей рабочей системе, регулярно или хотя бы “время от времени” – лучше сразу сделать все по возможности аккуратно.

И не говорите "такое никогда не случится". Во-первых, случится. А во-вторых, вам это не понравится.