| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > BBCode, как осуществить? |
| Автор: ElusivE 28.1.2006, 12:14 | ||||
Вот мне интерестно, как сделать ББКод? собственно мне нужно, чтобы когда я ввожу
это все заменялось на
Как это сделать? Добавлено @ 12:19 Кстати, прошу обратить внимание, что познание пхп у меня среднее |
| Автор: Mal Hack 28.1.2006, 12:53 |
| А поиском попользоваться? Так, чтобы на виду лежало, выкладываю часть своего старого парсера. |
| Автор: 2man 28.1.2006, 14:07 | ||||||
| Балин! не успел Вот пример типичного BB-кода:
Добавлено @ 14:11 А если по-сложнее, то:
regex_build_url() :
|
| Автор: podlom 7.10.2008, 19:09 |
| BBCode это не только тег url. Хотелось бы увидеть реализацию замены и других тегов типа: h1, h2, b, i, img и bq, а так же размышления по-поводу того как лучше реализовать и какие проблемы могут возникать. |
| Автор: SneG0K 7.10.2008, 19:53 |
Какие блин проблемы? Это просто замена текста одного другим! Так же как и тег LINK |
| Автор: sTa1kEr 7.10.2008, 21:18 |
| http://php.net/bbcode |
| Автор: Sunvas 8.10.2008, 00:29 |
| sTa1kEr, а "обратно" парсить он умеет? Из ХТМЛа в BB? - Иначе ж как тогда поступать: в базе данных хранить и каждый раз парсить? |
| Автор: sTa1kEr 8.10.2008, 05:32 |
Именно. "Обратно парсить" bbcode - это, имхо, моветон. |
| Автор: skyboy 8.10.2008, 08:41 |
во-первых, рано или поздно захочешь расширить схему кодов. например, добавишь новые смайлы. а тут - сюрприз: старые сообщения храняться уже ХТМЛными и их не преобразуешь. кроме того, htmlspecialchars ты тоже до записи в базу делаешь? |
| Автор: DioNiR 8.10.2008, 18:36 | ||||||||
А что тут сложного то? Добавил и всё.
Как сказал уже Sunvas
Значит ты пускаешь спокойный HTML код в ход? |
| Автор: HackMan 8.10.2008, 19:10 |
| Есть два метода хранения данных: с постобработкой (без предварительной обработки) и предобработкой. Или попросту говоря - сырые данные (raw data), которые получены от пользователя, или данные, которые уже обработаны (например, прошли через htmlspecialchars()) Оба способа активно используются. Здесь же надо определиться со структурой сайта, в частности с тем, как эти данные будут использоваться. Например, если это комментарии пользователей, к товару, которые будут просто отображаться, и никаких больше действий над ними не будет производиться, тогда имеет смысл функцию htmlspecialchars() применить (обрабатывать данные) до занесения комментария в базу, что бы не делать этого каждый раз перед выводом, ведь это лишняя нагрузка на сервер. Рассмотрим теперь второй пример. На этом же сайте есть автоцензорный фильтр, который будет вырезать из комментария все маты и заменять их на ***. Этот фильтр наверняка будет дополняться новыми словами, и что бы не было такого, что в фильтр добавили новое слово, и в новых комментариях оно не проходит, а в старых отображается, имеет смысл применять автоцензор (обрабатывать данные) уже после занесения в базу, до вывода в браузер. Вывод: если хранить данные с предобработкой - выигрываем в скорости выполнения и проигрываем в универсальности, а с постобработкой - с точностью наоборот. И выбор, каким из методов пользоваться, ложится на плечи разработчика. |
| Автор: sTa1kEr 8.10.2008, 22:28 | ||
1. На это потребуется совсем не много ресурсов, не больше чем любому шаблонизатору, str_replace или тому же htmlspecialchars() 2. Кеширование никто не отменял. А если уж говорить про проекты с высокой нагрузкой, то тем более большая часть данных как правило берется из кеша. Пример, винград, быстрая цитата. Ты нажал на быструю цитату и в нее подставился id поста, по которому затем можно получить дату, имя, etc. Однако, если пользователь решит отредактировать сообщение, то по дате и имени получить id уже не получится. Хорошо еще если можно как-то ссылку распознать и распарсить, и затем только из нее добыть этот id... Иначе данные, введенные пользователем, потеряны. Или добавлени к сообщению, ставится метка времени, но для отображения никому не нужна эта метка, вместо нее пишется пройденное время. Если добавить в базу именнов таком виде - данные, введенные пользователем, потеряны.
В каком виде смайлы должны хранятся в базе, что бы не пришлось делать постобработку сообщения перед выводом? В виде ссылок на конечные картинки. А теперь представь, что набор смайликов поменялся и ссылки уже должны ввести на совсем другие картинки. Кроме того опять же редактирование постов - ты понаставил смайликов ":)", редактируешь пост и видешь вместо своих смайликов кучу длиннющих тегов [ url ] Нет, htmlspecialchars необходимо использовать перед выводом, а не перед добавлением в базу. |
| Автор: nerezus 8.10.2008, 23:03 |
| ооооо.... google://State Machine алгоритм имхо на регекспах глупо делать - ибо человеческий фактор сыграет роль при куче регекспов, а потом XSS будут. |