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

Статус
В этой теме нельзя размещать новые ответы.
R

Rodik

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

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;
	}
 
Кстати, народ, интересно насколько безумная идея то же самое делать через DOM?
я конечно понимаю что извращенец, но имхо так проще будет:
Это набросок просто реализации идеи, любые правила можно дописать
 
Можно попробовать Котерова чуть переделать, но я в своих проектах использовал таки класс с phpclasses.org, который немного переделал, исправил ошибки, к сожалению его где-то потерял.
 
эх, вот именно поэтому я всегда советую перл для подобных штук.
вот, зацените как бы это выглядело на нём :)
Код:
 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;
интуитивно ведь всё понятно и просто.
 
эх, вот именно поэтому я всегда советую перл для подобных штук.
вот, зацените как бы это выглядело на нём :)
Код:
 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;
интуитивно ведь всё понятно и просто.

Для таких вещей в PHP есть PEAR. А за высказывания типа "Вот как бы это было на ..." можно получить выписку из баньки.
 
эх, вот именно поэтому я всегда советую перл для подобных штук.
вот, зацените как бы это выглядело на нём :)
Код:
 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;
интуитивно ведь всё понятно и просто.

зато весь остальной код выглядит примерно так:
Код:
my @links = ();
while($html =~ /<a.*?href="(.+?)"/gi) {
  push @links, $1 unless $1 =~ /site.ru/;
}
 
зато весь остальной код выглядит примерно так:
Код:
my @links = ();
while($html =~ /<a.*?href="(.+?)"/gi) {
  push @links, $1 unless $1 =~ /site.ru/;
}
ну, это если не очень хорошо знать perl. :) если хочется краткости - там для этого есть все инструменты (например, (@links) = /<a.*?href="(.*site.ru.*)"/gi)
хотя, не зря, конечно, ходила такая шутка, что perl - это write-only language.

но в данном случае я именно хотел отметить простоту реализации задачи парсинга формы.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху