Парсинг текcта. Есть проблема..

Alexos

Новичок
Парсинг текcта. Есть проблема..

Я позволяю юзверям вводить не только текст, но и выделять текст болдом или курсивом, строить талицы.. вообщим такой типа мини-хтмл... \[b\]some text\[/b\] (слэши для этого форума),
some text
...

Текст записываю как есть, (ессесно удаляя всякую лабуду типа тегов и всё такое) а потом делаю парсинг при выводе.

Так вот.. например, симол '\n' заменяю на '<br>'... и вот тут и возникает проблема - когда юзверь строит таблицы, то переносы на новую строку не избежны, и получается при парсинге из примера типа

some text

получается

<table><br>
<tr><br>
<td>some text</td><br>
</tr>
</table><br>

Как решить это проблему?
 

KR

alive in new life
Не использовать автоматическое преобразование \n в <br>, а добавить еще один тег, напр. [br]
 

young

Новичок
Удаляй вначале все переводы строк вокруг тегов [td] и [tr] а потом делай все остальное
 

Demiurg

Guest
можно удалаят все пробельные символы
1 между

3 между
и 2 между [tr] и и
4 между [/tr] и 5 между и
 

Alexos

Новичок
young, да уж.. что-то я не подумал совсем..

Ты это имеешь ввиду?

$search = array ("#\[table\]\n+#si",
"#\n+\[tr\]\n+#si",
"#\n+\[td\]\n+#si",
"#\n+\[\/tr\]\n+#si",
"#\n+\[\/td\]\n+#si",
"#\n+\[\/table\]#si"
);

$replace = array ("<table border=1>",
"<tr>",
"<td>",
"</tr>",
"</td>",
"</table>"
);
 

Alexos

Новичок
Demiurg,
всё понял
надо делать так:

$search = array ("#\[table\]\n+\[tr\]#si",
"#\[tr\]\n+\[td\]#si",
"#\[\/td\]\n+\[\/tr\]#si",
"#\[\/tr\]\n+\[tr\]#si",
"#\[tr\]\n+\[\/table\]#si"

);

$replace = array ("<table><tr>",
"<tr><td>",
"</td></tr>",
"</tr><tr>",
"<tr></table>"
);
 
Сверху