2016-08-07 56 views
1

我使用file_get_contents從其他網站的HTML頁面,我想提取形式value.Html是這個樣子:用preg_match提取表單值PHP?

<input type='hidden' name='csrfmiddlewaretoken' value='here'>

那麼,如何得到here使用preg_replace

我是什麼嘗試到目前爲止:

preg_match_all("/'hidden' value='(.*?)'/",$html, $matches); 不行!

+3

這將是一個'DOM'解析器**和** XPath查詢更加容易: '//輸入[@名稱= 'csrfmiddlewaretoken']'。 – Jan

+0

是否還有一些其他值也應該在內容中提取? – RomanPerekhrest

回答

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); 

Demo

+0

也許早兩秒:) – Jan

+0

我喜歡我們兩個相似但不同的方法:) –

+0

對不起,但不只是我的字符串中的一種形式,請更新它:( –

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 
?> 
+0

警告:DOMDocument :: loadHTML():標記節實體中無效,行:66 警告:DOMDocument :: loadHTML():標記頁腳在實體中無效,行:82 警告:DOMDocument: :loadHTML():打開和結束標記不匹配:實體中的頁腳和div,行:116 注意:試圖在 –

+0

中獲取非對象的屬性請幫忙:(( –