2013-07-17 105 views
1

我正在使用cURL檢索HTML頁面。 html頁面有這樣的表格。使用PHP從HTML中提取值

<table class="table2" style="width:85%; text-align:center"> 
<tr> 
<th>Refference ID</th> 
<th>Transaction No</th> 
<th>Type</th> 
<th>Operator</th> 
<th>Amount</th> 
<th>Slot</th> 
</tr> 
<tr> 
<td>130717919020ffqClE0nRaspoB</td> 
<td>8801458920369</td> 
<td>Purchase</td> 
<td>Visa</td> 
<td>50</td> 
<td>20130717091902413</td> 
</tr> 
</table> 

這是該HTML頁面中唯一的表格。我需要提取參考ID &使用PHP的槽。

但不知道該怎麼辦。

編輯:one幫了我很多。

+6

夫婦爲你的關鍵字,XPath的,simplehtmldom的,phpquery – DevZer0

+2

這也可能有助於http://php.net/manual/en/function.stripos .php –

+1

@Jose David Garcia Llanos:我想看看你是如何使用'stripos'來做到這一點的。 – zerkms

回答

0
$str = '<table class="table2" style="width:85%; text-align:center"> 
<tr> 
<th>Refference ID</th> 
<th>Transaction No</th> 
<th>Type</th> 
<th>Operator</th> 
<th>Amount</th> 
<th>Slot</th> 
</tr> 
<tr> 
<td>130717919020ffqClE0nRaspoB</td> 
<td>8801458920369</td> 
<td>Purchase</td> 
<td>Visa</td> 
<td>50</td> 
<td>20130717091902413</td> 
</tr> 
</table>'; 

preg_match_all('/<td>([^<]*)<\/td>/', $str, $m); 

$reference_id = $m[1][0]; 
$slot = $m[1][5]; 
+2

雖然它可以工作,但是使用正則表達式解析HTML代碼是非常令人沮喪的。應該使用適當的HTML解析器。 PHP帶有內置的解析器,比如DOMDocument類。 – Shane

+1

@Shane當然!儘管我爲了「完成任務」,即使有時違反了最佳做法,我也和下一個人一樣內疚。根據項目的規模和重要性,這可能是一個荒謬的答案。 –

+1

我也有罪。它確實有效。不過,我認爲我應該把它放在那裏,這是不鼓勵的。如果它是一些小腳本或類似的東西,通過一切手段放棄約定。但如果這是打算在生產環境中使用的東西,我建議你看看正確的做法;) – Shane

1

一個正則表達式,如接受的答案基礎的解決方案是來提取HTML文檔信息的正確途徑。

使用DOMDocument基礎的解決方案是這樣,而不是:

$str = '<table class="table2" style="width:85%; text-align:center"> 
<tr> 
<th>Refference ID</th> 
    ... 
<th>Slot</th> 
</tr> 
<tr> 
<td>130717919020ffqClE0nRaspoB</td> 
    ... 
<td>20130717091902413</td> 
</tr> 
</table>'; 

// Create a document out of the string. Initialize XPath 
$doc = new DOMDocument(); 
$doc->loadHTML($str); 
$selector = new DOMXPath($doc); 

// Query the values in a stable and easy to maintain way using XPath 
$refResult = $selector->query('//table[@class="table2"]/tr[2]/td[1]'); 
$slotResult = $selector->query('//table[@class="table2"]/tr[2]/td[6]'); 

// Check if the data was found 
if($refResult->length !== 1 || $slotResult->length !== 1) { 
    die("Data is corrupted"); 
} 

// XPath->query always returns a node set, even if 
// this contains only a single value. 
$refId = $refResult->item(0)->nodeValue; 
$slot = $slotResult->item(0)->nodeValue; 

echo "RefId: $refId, Slot: $slot", PHP_EOL;