Как получить значение <input>в удаленных кодах HTML с помощью PHP? - PullRequest
0 голосов
/ 01 августа 2011

На удаленном сайте есть файл HTML (скажем, http://www.example.com/abc.html),, который гласит:

<input id="ID1" name="NAME1" value="VALUE1">

В моем PHP-коде на моем сервере мне нужно "VALUE1" из http://www.example.com/abc.html. Как я могу сделать это с помощью PHP?

Поскольку удаленный HTML написан на XHTML 1.0, я думаю, я мог бы использовать синтаксический анализатор XML?


ДОБАВЛЕНО

Используя xml_parse_into_struct, я получил массив, содержащий:

[15] => Array
    (
        [tag] => INPUT
        [type] => complete
        [level] => 4
        [attributes] => Array
            (
                [TYPE] => hidden
                [NAME] => NAME1
                [ID] => ID1
                [VALUE] => VALUE1
            )

    )

Как я могу получить "VALUE1"? Я думаю, теперь это больше вопрос для обработки массивов в PHP. Я всегда знаю имя "NAME1", но я не знаю значения "VALUE1". Поэтому я хочу получить "VALUE1", используя "NAME1", это информация, которую я знаю.

Ответы [ 4 ]

1 голос
/ 01 августа 2011

Все будет зависеть от того, как вы будете получать весь массив.Но, взяв приведенный выше пример, вы можете получить значение как $array[15]['attributes']['VALUE'], где переменная $array - это переменная, используемая для вывода вашего xml_parse_into_struct вывода.Но если вы хотите, чтобы это было динамично, я предлагаю что-то более умное, так как я думаю, что индекс ключа 15 изменится, если на страницу будет добавлено больше элементов.

1 голос
/ 01 августа 2011

Почему бы просто не использовать простое регулярное выражение?

$html = '<input id="ID1" name="NAME1" value="VALUE1">';

if (preg_match('/name="NAME1".+value="(.*?)"/i', $html, $matches)) {
   echo $matches[1];  // should echo VALUE1;
}

Единственное ограничение заключается в том, что name должно появляться до value в элементе HTML.

0 голосов
/ 01 августа 2011

Если вам нужно передать переменную со страницы html в код PHP, используйте формы (http://www.w3.org/TR/html4/interact/forms.html) в формате html и $_POST (http://www.php.net/manual/en/reserved.variables.post.php) или $_GET (* 1008) *) переменные в PHP. Если вы не знакомы с массивами в PHP, взгляните на это: http://www.php.net/manual/en/language.types.array.php

0 голосов
/ 01 августа 2011

Если вы знаете имя элемента и действительно только после одной мелочи, а формат страницы всегда одинаков, то может быть меньше труда просто использовать curl и explode для разбора документа с Строка сравнивается. Это быстрый и грязный способ сделать это, но до тех пор, пока выполняются эти два условия, возможно, это самый быстрый способ:

$url = 'http://example.com/';
$options = array(
CURLOPT_RETURNTRANSFER => true,     // return web page
CURLOPT_HEADER         => false,    // don't return headers
CURLOPT_FOLLOWLOCATION => true,     // follow redirects
CURLOPT_ENCODING       => "",       // handle all encodings
CURLOPT_USERAGENT      => "spider", // who am i
CURLOPT_AUTOREFERER    => true,     // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
CURLOPT_TIMEOUT        => 120,      // timeout on response
CURLOPT_MAXREDIRS      => 10       // stop after 10 redirects
);

$ch      = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err     = curl_errno( $ch );
$errmsg  = curl_error( $ch );
$header  = curl_getinfo( $ch );
curl_close( $ch );
$parts = explode('<input id="ID1" name="NAME1" value="', $content);
if (count($parts) == 2) {
    $value = explode('">', $parts[1]);
    $value = $value[0];
} else {
    $value = false;
}

print 'Value is: ' . $value;

В противном случае вы можете использовать регулярные выражения (снова используя curl, как указано выше):

preg_match('/name="NAME1".+value="(.*?)"/i', $html, $value);
$value = $value[1];

Наконец, если вы хотите сделать все возможное в этом, вы можете использовать анализатор документов. Однако имейте в виду, что если HTML-код, с которым вы работаете, сформирован неправильно, у парсера возникнут проблемы. Вот учебник по предмету с использованием стороннего класса: http://net.tutsplus.com/tutorials/php/html-parsing-and-screen-scraping-with-the-simple-html-dom-library/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...