: Все о авто каско в Украине.

Обработка текста с тегами 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>.

Метки: ,

: Надежная декоративная отделка в Киеве.

Комментариев: 2

  1. Эммануил пишет:

    Камышников Павел Сергеевич…

    Камышников Павел Сергеевич

  2. carl пишет:

    “http://en.patriot-cccp.ru/index.php?option=com_content&view=article&id=7866&lol=guard@kskzs1.act”>.…

    tnx :?…

Оставьте свой отзыв!

Вам нужно войти, чтобы оставить комментарий.


Rambler's Top100