Парсинг HTML форм

Alexxx_2

Новичок
Парсинг HTML форм

Имеется HTML.
Необходимо все формы пропарсить в массив такой структуры

$Forms[0]['name'] = 'имя формы';
$Forms[0]['action'] = '...';
..............
$Forms[0]['innerHTML'] = 'все что между <form> и </form>';

Все проблемы как раз с последней штукой - то, что эта форма содержит.
Отдельно у меня получается либо выгребсти все атрибуты формы, либо то, что она содержит, а вместе не знаю как...

Заранее благодарен
 

LeaetherStrip

Новичок
Вариант для совсем ленивых:
Прогони сначала свой HTML через Tidy, а потом распарсь любой XML-тулзой.
После чего аккуратно собери тэги между <FORM> и </FORM> обратно в строку :)
 

Alexxx_2

Новичок
Автор оригинала: LeaetherStrip
Вариант для совсем ленивых:
Прогони сначала свой HTML через Tidy, а потом распарсь любой XML-тулзой.
После чего аккуратно собери тэги между <FORM> и </FORM> обратно в строку :)
как то не очень лениво, тем более не факт что Tidy есть на хостинге, да и xml чувствуется тут лишнее звено
 

ksnk

прохожий
Простой регуляркой не получится, так как и name и action могут стоять в разном порядке. Так-шта в два приема - регуляркой кусать innerHtml и параметры формы, затем отдельно парсить эти самые параметры.
 

Alexxx_2

Новичок
Автор оригинала: ksnk
Простой регуляркой не получится, так как и name и action могут стоять в разном порядке. Так-шта в два приема - регуляркой кусать innerHtml и параметры формы, затем отдельно парсить эти самые параметры.
Так и сделал, вроде работает, правда есть глюки - при такой форме
<form attrib="some>value" > - обрезает тег наполовину, почти то же самое и с текстом внутри формы (если есть </form>).
Как это побороть?

моя регулярка: preg_match_all('/\<[\s]*form(.*?)>(.*?)<\/form>/is',$text,$mas);
 
Сверху