Разбор PHP через str_replace, ereg_replace - как исключить раздел из целевого текста? - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть старая пользовательская система управления контентом на PHP, где пользователи могут писать статьи.

Когда отображается основной текст, я выполняю несколько вызовов str_replace и ereg_replace для разбора ссылок и заголовков и другихбиты.

Теперь необходимо иметь возможность вводить блок HTML-кода в основной текст (иногда) и не анализировать его ранее упомянутыми функциями.Эти блоки должны фактически отображаться как HTML.

Блок может быть заключен в тег (т. Е. [Html] и т. Д.) Для его идентификации, но как мне исключить разбор этого раздела, когда я в основном просто запускаю вышеупомянутые функции по всему основному текстублок

1 Ответ

0 голосов
/ 19 декабря 2011

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

Для каждого [html] блока генерируйте уникальный идентификатор (например, через uniqid или что-то хэширующее, возможно, содержимое блока). Убедитесь, что этот идентификатор (который должен быть чем-то, что , а не зависит от вашего другого анализа, так что alphanum будет хорошим выбором) на самом деле не существует в тексте. Если это так, сгенерируйте другое.

Сохранить идентификатор и содержимое соответствующего блока [html] в массиве, используя идентификатор в качестве ключа. Затем замените подстроку [html]blah[/html] на [html]identifier[/html] в вашем вводе.

Продолжите синтаксический анализ, как обычно, и когда вы закончите, замените [html]identifier[/html] биты реальным контентом. Это можно сделать всего одним вызовом preg_replace для всех блоков, если вы используете опцию /e (оценивать замену строки как код).

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