2009-11-23 2 views
1

Я создал очень простой парсер разметки в php. Однако в настоящее время он использует str_replace для переключения между разметкой и html. Как я могу создать поле «код» (в конечном итоге будет использовать GeSHI), содержимое которого не тронуто?Построение парсера разметки в php

В настоящее время следующая разметка: [code][b]Some bold text[/b][/code] завершает разбор парсером в виде кода с <b>Some bold text</b>.

Мне нужен совет, какой вариант лучше?

  • Имейте это проверить каждое слово по отдельности, и если он не находится внутри [код] поле он должен разобрать
  • Оставьте как есть, пусть пользователи не смогут размещать разметку внутри [код].
  • Создайте еще один тип кодового окна специально для разметки HTML, у вас есть [код] autorevert < или> на [и].

Возможно, есть еще один вариант? Это немного сложнее, чем я думал, что это будет ...

EDIT: Стоит ли даже добавлять к этому парсе код типа кода? Я имею в виду, я вижу, как это может быть полезно, но это небольшой объем усилий для небольшого результата.

ответ

2

Вы можете разбить его на несколько строк для использования str_replace. Разделите строки на тегах [code] и [/ code] - сохраните код в отдельной строке. Обратите внимание на то, где это произошло в исходной строке. Затем используйте str_replace в исходной строке и сделайте все, что вы хотите, в строке кода. Наконец, повторно вставьте поля обработанных кодов и отобразите их.

Просто слово предупреждения, хотя включение ввода в html для отображения поражает меня как неотъемлемо опасного. Я бы порекомендовал большое количество дезинфекции и проверки ввода перед переходом на html для повторного отображения.

+0

Он не конвертирует все в html, а только определенный массив. И < and > преобразуются в их html-сущности;) – Cyclone

+0

И да, я думаю, что это то, что я буду делать. – Cyclone

+0

Этот момент, когда вы находите ответ от 4 лет назад. И в ужасе от ваших собственных предложений o.O. Это не значит, что этот метод не сработает, но человек далеко от оптимального решения. –

3

Зачем вам изобретать велосипед?

Уже есть много markup parsers.

В любом случае, просто str_replace не поможет. Вам нужно будет изучать регулярные выражения и, как говорится, now you've got two problems;)

+0

Мне нравится пытаться самостоятельно строить вещи, если это возможно, плюс я почти готов. На самом деле str_replace работает до тех пор, пока мы не нажмем на ошибку скорости кода. – Cyclone

+0

В свое время я много раз изобретал колесо, а не потому, что я напыщен или не люблю чужой код. Это просто делает вас лучшим программистом и дает вам опыт, который вам нужен. Я на самом деле построил парсер разметки один раз (качество продукции) с помощью регулярного выражения. Я могу вам сказать, что это нецелесообразно. Проблемы с безопасностью немного. Хотя это датировано, для любых будущих пользователей, если вы его строите, наслаждайтесь опытом обучения, но я предпочел бы, чтобы вы не использовали его в производстве. – frostymarvelous

0

HTML-декорирование довольно милый. http://pear.php.net/package/PHP_Beautifier. У вас есть класс декоратора, который, вероятно, подходит вашим потребностям.

+0

Является ли класс декоратора обработкой таких вещей, как мои метки разметки? – Cyclone

0

Чтобы иметь четкое представление, проблема возникает в двух частях. Первая часть - это необходимость того, чтобы лексический анализатор разбивал ваш «код» на ключевые слова для вашего «языка». После того, как у вас есть лексический анализатор, вам понадобится парсер. Синтаксический анализатор - это код, который принимает ключевые слова для вашего языка один раз в то время как логический (обычно рекурсивный спуск).

Смежные вопросы