小编Ped*_*nha的帖子

在PHP上使用regex获取HTML页面<input>值和名称

好吧,正如标题所说,我有一个HTML页面,我使用libcurl(PHP内部的cURL)获取.
该页面有一个<form>,我需要提取<input>名称和值,我想使用Regex.
我正在使用正则表达式,因为我认为这是更简单的方法.如果你认为我不应该使用正则表达式,而是像xpath那样,请说明如何.

我不知道你是否能理解我想说的话,所以随意问.

这是PHP代码(完整):

<?php



/***** DISABLED BY NETWORK TRAFFIC REASONS... USING LOCAL CACHE

$curl = curl_init();
$url = 'https://secure.optimus.pt/Particulares/Kanguru/Login/';
$useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; pt-PT; rv:1.9.1) Gecko/20090624 Firefox/3.5';
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_USERAGENT,$useragent);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,true);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
curl_setopt($curl,CURLOPT_CAINFO,getcwd()."\optimus_secure.crt");
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$contents = curl_exec($curl);
*/

$contents = file_get_contents('local_secure.html');
preg_match('%<form name="aspnetForm" .*? action="(.*?)" .*?>(.*?)</form>%s',$contents,$matches);
//echo '<pre>'.htmlentities($contents).'</pre>';
//array_shift($matches);
echo '<pre>---------';
foreach($matches as $match)
    echo '$match:::::: '.htmlentities($match)."\r\n\r\n";
echo '</pre>';

echo '<pre>__________';
preg_match_all('/<input type=".*?" name="(.*?)" value="(.*?)" \/>/', $matches[0], $matches2);
print_r($matches2);
echo '</pre>';

?>
Run Code Online (Sandbox Code Playgroud)

当然,<pre>标签和所有输出仅用于调试.

另外,这是HTML页面的源代码(重要的部分):

<form …
Run Code Online (Sandbox Code Playgroud)

php regex xhtml input

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

input ×1

php ×1

regex ×1

xhtml ×1