我使用file_get_contents
从其他网站获取html页面,我想提取表单值.Html看起来像这样:
<input type='hidden' name='csrfmiddlewaretoken' value='here'>
那么,我如何使用here
preg_replace
到目前为止我的尝试:
preg_match_all("/'hidden' value='(.*?)'/",$html, $matches);
不行不通!
答案 0 :(得分:3)
不要使用正则表达式来解析HTML。使用专门为此设计的工具。
$previous_value = libxml_use_internal_errors(TRUE);
$string ="<input type='hidden' name='csrfmiddlewaretoken' value='here'>";
$dom = new DOMDocument();
$dom->loadHTML($string);
$input = $dom->getElementsByTagName('input')->item(0);
echo $input->getAttribute("value");
libxml_clear_errors();
libxml_use_internal_errors($previous_value);
答案 1 :(得分:2)
如评论中所述,请改为使用DOM
解析器:
<?php
$data = <<<DATA
<input type='hidden' name='csrfmiddlewaretoken' value='here'>
DATA;
$dom = new DOMDocument();
$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
$input = $xpath->query("//input[@name = 'csrfmiddlewaretoken']/@value")->item(0)->nodeValue;
echo $input;
# here
?>