2010-07-14 78 views
4

我知道正則表達式在這裏不受歡迎,使用php腳本在HTML表單中提取輸入標記值的最佳方法是什麼?如何使用PHP提取HTML輸入標記的值

例如:

一些div /表等。

<form action="blabla.php" method=post> 

<input type="text" name="campaign"> 
<input type="text" name="id" value="this-is-what-i-am-trying-to-extract"> 

</form> 

一些div /表等。

由於

+0

任何機會,你可以換一種說法?你想在你的php腳本發佈時獲得輸入控件的值嗎?如果這是非常基本的。還不確定關於正則表達式的評論在這種情況下有什麼? – spinon 2010-07-14 19:17:34

+0

這是在生成頁面(用php)還是在表單提交後? – 2010-07-14 19:17:37

+0

@spinon我認爲他指的是[正確]「你不能用正則表達式解析HTML」的答覆,但我認爲他還沒有意識到,即使你可以,他也不想這樣做。 – 2010-07-14 19:18:56

回答

0

郵政形式向PHP頁面。你想要的值將在$ _POST ['id']中。

0

你是什麼意思正則表達式不受歡迎?我爲一個愛正規表達。

不管怎樣,你要的是一樣的東西:

$contents = file_get_contents('/path/to/file.html'); 
preg_match('/value="(\w+)"/',$contents,$result); 
+3

每個人都喜歡他們...只是不適合HTML PARSING。請參閱http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454關於這一點的上下文和SO! – JAL 2010-07-14 19:23:19

+0

哈哈我同意,正則表達式是可怕的解析HTML。然而,對於這個問題,正則表達式是一個完全有效的解決方案,但絕對不是唯一的解決方案。 – Josiah 2010-07-14 19:27:54

+0

如果HTML中有其他輸入具有值屬性,該怎麼辦?如果該屬性不是精確地寫成了'value =「foo」',而是'Value =「foo」',該怎麼辦?如果HTML包含這個非常評論怎麼辦? – Gordon 2010-07-14 19:55:08

14

如果你想提取一些HTML字符串的一些數據,最好的辦法就是經常與DOMDocument類工作,即可以加載HTML到DOM樹。然後,您可以使用任何與DOM相關的方式提取數據,例如,XPath查詢。


在這裏,你可以使用這樣的事情:

$html = <<<HTML 
    <form action="blabla.php" method=post> 

    <input type="text" name="campaign"> 
    <input type="text" name="id" value="this-is-what-i-am-trying-to-extract"> 

    </form> 
HTML; 


$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 

$tags = $xpath->query('//input[@name="id"]'); 
foreach ($tags as $tag) { 
    var_dump(trim($tag->getAttribute('value'))); 
} 

而且你會得到:

string 'this-is-what-i-am-trying-to-extract' (length=35) 
+0

試試'echo $ xPath-> evaluate('string(//輸入[@ name =「id」]/@ value)');' – Gordon 2010-07-14 19:41:53

2
$html=new DOMDocument(); 
$html->loadHTML('<form action="blabla.php" method=post> 
    <input type="text" name="campaign"> 
    <input type="text" name="id" value="this-is-what-i-am-trying-to-extract"> 
    </form>'); 

$els=$html->getelementsbytagname('input'); 

foreach($els as $inp) 
    { 
    $name=$inp->getAttribute('name'); 
    if($name=='id'){ 
    $what_you_are_trying_to_extract=$inp->getAttribute('value'); 
    break; 
    } 
    } 

echo $what_you_are_trying_to_extract; 
//produces: this-is-what-i-am-trying-to-extract 
+0

會觸發*嚴格標準:非靜態方法DOMDocument :: loadHTML()should不被稱爲靜態* – Gordon 2010-07-14 19:41:05

+0

是的,我想......但它的工作原理。不妨按照喜歡的風格去做。 – JAL 2010-07-14 21:57:59