Обработка текста с тегами pre и code
Иногда требуется выполнить какую-либо обработку HTML-кода (например, расставить графические смайлики, выполнить типографирование, убрать лишние пробелы). До тех пор, пока в этом коде нет тегов <pre> и <code>, все очень просто решается обычными регулярными выражениями. Однако при наличии этих тегов возникает необходимость сохранить текст внутри них без каких-либо изменений.
В этом случае подойдет следующее решение: запомнить и заменить содержимое этих тегов специальными последовательностями, у которых очень мала вероятность встретиться в тексте, провести обработку оставшейся части, после чего провести обратную замену.
Последовательность, на которую производится замена, должна выбираться так, чтобы при обработке она никаким образом не была изменена.
Пример такого кода:
// замена тегов
$pre_count=preg_match_all('|(
.*?
)|is',$text,$pre_matches);
for ($i=0; $i<$pre_count; $i++) $text=str_replace($pre_matches[0][$i],'',$text);
$code_count=preg_match_all('|(.*?)|is',$text,$code_matches);
for ($i=0; $i<$code_count; $i++) $text=str_replace($code_matches[0][$i],'',$text);
// здесь будет производиться обработка текста в переменной $text регулярными выражениями
// восстановление тегов
for ($i=0; $i<$pre_count; $i++) $text=str_replace('',$pre_matches[0][$i],$text);
for ($i=0; $i<$code_count; $i++) $text=str_replace('',$pre_matches[0][$i],$text);
В данном примере содержимое тега pre заменяется на последовательность вида <PRE|номер|случайная_строка>, где номер — порядковый номер тега pre (так как в тексте он может встретиться несколько раз), случайная строка — MD-хеш случайного числа (содержит только 16-ичные цифры, что минимизирует вероятность их некорректной обработки).
Важно: номер последовательности не должен стоять в конце (или за ним должен быть какой-то ограничивающий символ), так как в противном случае последовательности с номерами больше 9 начнут обрабатываться некорректно (при обратной замене вместо них будет вставляться первая или нулевая последовательность). Кроме того, предолженный код не будет работать с вложенными тегами.
Если в обработчике предполагается анализ и проверка правильности HTML-тегов, то целесобразно привести заменяющую строку к виду, напоминающему корректный HTML-тег, например: <pre num=”номер” code=”случ_строка”></pre>.
Метки: обработка текста, регулярные выражения
: Надежная декоративная отделка в Киеве.
12 мая 2010 в 17:41
Камышников Павел Сергеевич…
Камышников Павел Сергеевич …
8 октября 2011 в 06:55
“http://en.patriot-cccp.ru/index.php?option=com_content&view=article&id=7866&lol=guard@kskzs1.act”>.…
tnx :?…