Сегодня принято получать пространство стека кратным этому размеру по нескольким причинам:
По этой причине фактические компиляторы указывают ABI, которые должны быть разработаны таким образом.
Существует и pecl и ГРУША BBCode парсинг библиотеки. Программное обеспечение достаточно трудно, не переосмысливая годы работы самостоятельно.
Если бы ни один из тех не является опцией, я сконцентрировался бы на превращении BBCode в допустимую строку XML и затем использования Вашего любимого XML парсинг стандартной программы на этом. Очень очень общее представление здесь, но
Выполните код через htmlspecialchars для выхода из любых объектов тот выход потребности
Преобразуйте все [и] символы в <и> соответственно
Не забывайте объяснять двоеточие в случаях как [tagname:
Если бы BBCode был вложен правильно, то Вы должны быть все установлены передать эту строку в XML, анализирующий объект (SimpleXML, DOMDocument, и т.д.)
Существует несколько существующих библиотек для парсинга BBCode, может быть легче изучить библиотеки, чем попытка к самокрутке:
Вот пара, я уверен, что существует больше, если Вы озираетесь:
PECL bbcode
ГРУША HTML_BBCodeParser
Ответ к: "Какая-либо лучшая идея?" (и я предполагаю, что это было приглашением не только для улучшения по сравнению с bbcode-определенными предложениями),
Мы недавно посмотрели на хождение bbcode путем и выбрали использование htmlpurifier вместо этого. Это решение базировалось частично на (по общему признанию смещено, вероятно) сравнения между различными методами, перечисленными htmlpurifier группой здесь и обсуждением bbcode (снова htmlpurifer группой) здесь
И для записи я думаю, что Ваш английский язык был очень хорош. Я уверен, что это намного лучше, чем я мог сделать на Вашем родном языке.
Используйте preg_split ()
с флагом PREG_DELIM_CAPTURE
для разделения исходного кода на теги и не теги. Затем выполните итерацию по тегам, сохраняя стек открытых блоков (например, когда вы видите открывающий тег, добавьте его в массив. Когда вы видите закрывающий тег, удаляйте элементы с конца массива, пока закрывающий тег не совпадет с открывающим тегом.)