BBcode — это простой текстовый язык разметки, который применяется на форумах, гостевых книгах и в формах комментирования на некоторых сайтах. Этот код прост для освоения новичками и поэтому популярен.
Написанный пользователем текст нужно распарсить из bbcode в html. Для этого есть готовые решения, но я хотел бы предложить свою простую функцию на php, которая делает это. По сути, это набор регулярных выражений, через которые пропускается текст и на выходе мы получаем html.
Я тут заморочился и написал универсальный граббер контента. Он работает прямо в браузере и умеет тащить картинки, ссылки и RSS. Подробно об этом инструменте я напишу дальше.
Даны строки вида:
aa1 bbb ccc
aa2 "bbb ccc" ddd
aa3 "b c d" "s d f" ddd
"aaa4" ccc
Нужно написать регулярное выражение, которое разобъет эти строки либо по пробелу, либо по кавычкам. То есть, если элемент без кавычек — нужно брать его. А если в кавычках — то считать содержимое кавычек одним элементом.
На выходе должно получиться:
{'aa1', 'bbb', 'ccc'},
{'aa2', 'bbb ccc', 'ddd'},
{'aa3', 'b c d', 's d f', 'ddd'},
{'aaa4', 'ccc'}
Это похоже на CSV.
Часто бывает так - есть файл Word с содержимым, которое нужно срочно-быстро-решительно выложить на сайт. Можно конечно верстать страничку руками, копируя из ворда только текст. Но это долго. Можно поступить как продвинутый подован и выбрать "Файл - Сохранить как... - html". Но это некрасиво и тяжело. Код получается черте какой.
В этом посте я расскажу о том, как лично я решил для себя эту задачу и заодно всякие подобные.
Обычно парсятся целые страницы, но иногда нужно написать функцию или даже просто распарсить всего-лишь один тег.
Рассмотрим задачу: есть тег textarea, у которого может быть сколько угодно совершенно разных атрибутов. Сколько, каких и каков их порядок — не известно. Задача — получить хэш, ключами которого будут имена атрибутов, а значениями — их значения (опа, каламбур).
Дано: текст с кривым-кривым и неправильным вообще html.
Задача: расставить в этом html ссылки на заданный адрес по заданному слову. Сложность в том, что если это слово стоит в каком-то контейнерном теге, кроме <p>, его трогать не надо.