| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > BBcode проверка и замена |
| Автор: Staind 10.3.2008, 22:19 | ||
| Есть проверка на тэги bbcode. Вот так реализовано:
Но если я введу строку так (скобки - это означает что символы находятся в bbcode): "(вцфв)цфвццвффу(пкырк)", то у меня закрашивается жирным вся строка "(вцфвцфвццвффупкырк)" после обработки. Незнаю почему так. Конечно здесь скорее всего в выражении проблема. Люди добрые подскажи как этого избежать? |
| Автор: skyboy 10.3.2008, 23:29 |
| я вообще удивляюсь, что данній код что-то обрабатывает. вообще-то, у http://ua.php.net/preg_replace первым параметром идет - что искать, а уже вторым - на что заменять. у тебя же - наоборот... |
| Автор: flashaa 10.3.2008, 23:29 | ||
Во-первых, первый и второй параметр поменять местами.
Во-вторых при чем здесь bbcode? Вычленяются строки между вот такими слешами "\" (включительно) и заменяются на внутренность слешей. А (?i) - для понта? К сведенью, эти символы включают режим регистронезависимости после них. |
| Автор: Staind 10.3.2008, 23:53 |
| 2skyboy, да, я его случайно написал на форум неправильно. В самом коде в плане расстановки норм. А как чтобы нормально было?) |
| Автор: SelenIT 11.3.2008, 00:09 |
| Staind, что-то я не понял, у тебя BB-коды выделяются круглыми скобками, а не квадратными, как обычно? Прикол с (?i) тоже не понял... может, имелось в виду незахватывающее совпадение (?:что-то)? Приведи пример реальных исходных данных, и что должно получиться после обработки. А то описание проблемы как-то сумбурно выглядит... |
| Автор: flashaa 11.3.2008, 10:48 | ||||
| Staind, обычно bbcode это нечто, похожее на тег, но в квадратных скобках. Поскольку теги сильно отличаются по смыслу, то универсальный вычленитель должен работать через вызовы callback-функций.
Здесь находятся теги типа b.../b, i../i и им подобные. После того, как строки находятся, из забирается имя тега (для моих примеров это "B, "I") и содержимое тега (то, что между и ). Эти 2 величины передаются в функцию bbcode_replace_callback, которую надо написать самому. Ф-ция может выглядеть примерно так:
|
| Автор: Staind 11.3.2008, 14:25 |
| 2flashaa, спасибо, буду пробовать. Честно говоря даже и не знал что нужно создавать пользовательскую функцию. У Вас очень грамматно написано^^ 2SelenIT, я понял что в квадратных. На форуме не смог написать примеры с квадратными скобками, поэтому, прежде чем писал код написал "скобки - это означает что символы находятся в bbcode" Модификатор (?i) поставил затем, чтобы были регистронезависемые b,i,u... |
| Автор: flashaa 11.3.2008, 14:37 | ||||
| SelenIT, но все равно какой смысл туда его ставить? Такие штуки ставятся, когда часть регулярки работает по одним правилам, другая часть - по другим. В данном случае это просто модификатор /i. По поводу тегов - сейчас заметил, что в моем посте половина пропала, форум съел ) Теперь понятно, почему в первом посте через скобки. Staind, потестил код на нескольких примерах, вроде работает. Хотя возможны скрытые баги.
Выводит:
|
| Автор: Staind 11.3.2008, 16:17 |
| 2flashaa, спасибо большое, все получилось |
| Автор: Staind 11.3.2008, 19:35 |
| Ув. люди, еще мелкий вопрос: Я тут подумал, а в самой MySQL базе как хранить информацию? Хранить в реальных тэгах или в bbcode тэгах? У меня сейчас сделано так: После редактирования я все bbcode тэги перевожу на html тэги. А думаю сделать так: После редактирования сохраняются все bbcode Тэги как есть и при отображении информации они уже меняются на html тэги. Как лучше? Я просто посмотрел исходники phpBB3 и у них там по идее сохраняется как есть а уже при отображении идет перевод в html тэги. И так же хотел спросить - А много ли будет кушать ресурсов, если при отображении заменять?))) |
| Автор: Sanchezzz 11.3.2008, 19:54 |
| как хочешь лучше в бб кодах а в скрипте менять уже на код картинки и так и так одинаковая скорость. |
| Автор: Staind 11.3.2008, 19:58 |
| 2Sanchezzz, благодарю, тогда в bbcod'ах буду хранить. |
| Автор: flashaa 12.3.2008, 10:27 |
| Я думаю НЕ стоит хранить в html, т.к. надо оставлять себе свободу на будущее. К примеру в один прекрасный день ты захочишь выключить BB-теги или по-другому их обрабатывать. Тогда ты просто поменяешь код обработки. А если в базе сохранен сразу html, то с ним уже ничего не сделаешь. К тому же хранить html вообще опасно, лучше проверять и форматировать перед выводом - чуть более ресурсоемко, но надежо и хорошо управляемо. |