класс парсящий html форму в массив

Тема в разделе "PHP Pro", создана пользователем Rodik, 29 дек 2007.

Статус темы:
Закрыта.
  1. Rodik

    Rodik Прохожие

    Ищю готовый класс умеющий распарсить html форму и выдать всё её параметры и данные в ассоциированном массиве, на phpclasses.org лежат 2 класса которые устраивают меня по функционалу, но корректно не работают - htmlformparser и formfields. Может кто-нибудь есть рабочая реализация такого класса?
     
  2. zavulon

    zavulon Постоялец

    Регистр.:
    9 май 2007
    Сообщения:
    79
    Симпатии:
    34
    выдрал из своего проекта. оно?

    PHP:
        function formToArray($html) {
            
    $result = array();
            if (!
    preg_match_all('#<(input|select)[^>]+>#i'$html$inputs)) return false;

            foreach (
    $inputs[0] as $input) {
                if (!
    preg_match('#\sname\s*=\s*["|\']?([^"\']*)["|\']?#i'$input$m)) continue;
                
    $name $m[1];
                if (
    preg_match('#\svalue\s*=\s*["\']?([^"\']*)["\']?#i'$input$m)) {
                    
    $value $m[1];
                } else {
                    
    $value null;
                }

                
    $result[$name] = $value;
            }

            return 
    $result;
        }
     
  3. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    Кстати, народ, интересно насколько безумная идея то же самое делать через DOM?
    я конечно понимаю что извращенец, но имхо так проще будет:

    PHP:
    <?php
    $ned 
    = @DOMDocument::loadHTMLFile("http://www.mail.ru");
    $xp = new DOMXPath($ned);
    print_r($xp->query("//input")->item(0)->attributes->item(0)->nodeValue);
    Это набросок просто реализации идеи, любые правила можно дописать
     
  4. anarki

    anarki Прохожие

    Можно попробовать HTML_MetaForm Котерова чуть переделать, но я в своих проектах использовал таки класс с phpclasses.org, который немного переделал, исправил ошибки, к сожалению его где-то потерял.
     
  5. skabbit

    skabbit Постоялец

    Регистр.:
    6 дек 2007
    Сообщения:
    88
    Симпатии:
    1
    эх, вот именно поэтому я всегда советую перл для подобных штук.
    вот, зацените как бы это выглядело на нём :)
    Код:
     use HTML::Form;
     $form = HTML::Form->parse($html, $base_uri);
     $form->value(query => "Perl");
    
     use LWP::UserAgent;
     $ua = LWP::UserAgent->new;
     $response = $ua->request($form->click);
     print $response->content;
    
    интуитивно ведь всё понятно и просто.
     
  6. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Для таких вещей в PHP есть PEAR. А за высказывания типа "Вот как бы это было на ..." можно получить выписку из баньки.
     
  7. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    зато весь остальной код выглядит примерно так:
    Код:
    my @links = ();
    while($html =~ /<a.*?href="(.+?)"/gi) {
      push @links, $1 unless $1 =~ /site.ru/;
    }
     
  8. skabbit

    skabbit Постоялец

    Регистр.:
    6 дек 2007
    Сообщения:
    88
    Симпатии:
    1
    ну, это если не очень хорошо знать perl. :) если хочется краткости - там для этого есть все инструменты (например, (@links) = /<a.*?href="(.*site.ru.*)"/gi)
    хотя, не зря, конечно, ходила такая шутка, что perl - это write-only language.

    но в данном случае я именно хотел отметить простоту реализации задачи парсинга формы.
     
  9. Lonely Wolf

    Lonely Wolf Прохожие

Статус темы:
Закрыта.