Помогите убрать переносы строк за ячейками таблиц

DDT

Новичок
Помогите убрать переносы строк за ячейками таблиц

Привет.

Обрабатываю html-код, полученный от WYSIWIG редактора. Если в нем встречается таблица, то код таблицы выгладит примерно следующим образом:
<table>
<tr>
<td>...</td>
</tr>
</table>

Я выбросил всякое оформление, которое добавляет редактор. Смысл в том, что теги стоят на разных строках. Таким образом между тегами table, tr и td есть переносы строк, которые преобразуются в <br> и выносятся передтаблицей. Чего очень не хочется :)

Задача:
Убирать символы \r\n, находящиеся НЕ между тегами <TD></TD>.

Можно это красиво сделать одной регуляркой?

Если нет, то еть у меня такое решение, но в конце оно не хочет делать замену:
PHP:
// $param - это переменная с html-кодом от редактора

preg_match_all('/(?<=)<tr.+?>(\r\n)<td.+?/m', $param, $a);

foreach($a[0] as $from)
{
	$to = preg_replace('/\r\n/m', '', $from);
	$param = preg_replace('/'.$from.'/m', $to, $param);				
}
Заранее спасибо.
 

Invizz

Новичок
Чтобы не перегружать регекспы, вынесем в несколько простых:

PHP:
$from = preg_replace('@<table>(\s*?)<tr>@', '<table><tr>', $from);
$from = preg_replace('@<tr>(\s*?)<td>@', '<tr><td>', $from);
$from = preg_replace('@</td>(\s*?)</tr>@', '</tr><tr>', $from);
$from = preg_replace('@</tr>(\s*?)<tr>@', '</tr><tr>', $from);
$from = preg_replace('@</tr>(\s*?)<table>@', '</tr><table>', $from);
 

MadGreen

meninweb
DDT безсмысленная работа
еще более бессмысленно - после WYSIWIGа производить html форматирование
 

Vallar_ultra

Любитель выпить :)
2MadGreen

Почему бессмысленная работа???? Если это online-WYSIWIG, то они иногда ТАКИЕ ПЕРЛЫ выдают, что хоть стой - хоть падай......
 

DDT

Новичок
2 hash

Браузером. Куда по-твоему денется перенос строки:
<table>
<br>
<tr><td></td></tr>
</table>

Будет вынесен перед таблицей ;)


Спасибо, Invizz. Попробую.


2 MadGreen
см. выше пример про <br>

-~{}~ 25.12.06 09:03:

Автор оригинала: Invizz
Чтобы не перегружать регекспы, вынесем в несколько простых:

PHP:
$from = preg_replace('@<table>(\s*?)<tr>@', '<table><tr>', $from);
$from = preg_replace('@<tr>(\s*?)<td>@', '<tr><td>', $from);
$from = preg_replace('@</td>(\s*?)</tr>@', '</tr><tr>', $from);
$from = preg_replace('@</tr>(\s*?)<tr>@', '</tr><tr>', $from);
$from = preg_replace('@</tr>(\s*?)<table>@', '</tr><table>', $from);
У меня сложность в том, что код выглядит вот таким образом:
<table style=\"border-right: medium none border-top: medium none border-left: medium none border-bottom: medium none border-collapse: collapse\" class=\"MsoTableGrid\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\">
<tbody>
<tr>
<td style=\"border-right: windowtext 1pt solid padding-right: 5.4pt border-top: windowtext 1pt solid padding-left: 5.4pt padding-bottom: 0cm border-left: windowtext 1pt solid width: 159.5pt padding-top: 0cm border-bottom: windowtext 1pt solid background-color: transparent\" valign=\"top\" width=\"213\">

Т.е. теги не чистые, а с атрибутами да еще и на разных строках. Применение модификатора /m почему-то результата не дает :/

PHP:
preg_match_all('/<table(.*?)>(.*?)<tbody>/m', $param, $a);
P.S.
в рег выражении разница есть между ограничителями @ и /?

-~{}~ 25.12.06 09:07:

Добавление:

работает вот такая схема:
PHP:
preg_match_all('@<table(.*?)>\r\n<tbody>@m', $param, $a);
Но тогда вопрос: как убрать отсюда перенос строки, СОХРАНИВ атрибуты тегов?
 

Prosto_niki

Новичок
Держи чувак ответ:

[censored] пхп функция маленькая. Для меня она сработала отлично.
 
Сверху