$a = array(
'<td colspan="3" align="left"><textarea name="a" cols="66"',
'rows="2">aaa',
'bbb</textarea></td>',
'</tr>',
'<tr align="center">',
'<td bgcolor="#6699FF" class="head2">影響服務</td>',
'<td colspan="3" align="left"><textarea name="IAffectedService"',
'cols="66" rows="2">1234567',
'<td colspan="3" align="left"><textarea name="c" cols="66"',
'rows="2">ccc',
'ddd</textarea></td>',
);
假設有一個陣列像上面這樣子
我希望抓出
textarea name="a" 裡面的值
但
textarea name="b" 的不要
就是抓出
aaa
bbb
請問怎麼做呢
謝謝
看起來你是用 file() 指令去讀檔案。所以把上面那個 html 檔讀成一個無意義的陣列了。建議使用 file_get_contents() 讀成一個字串就可以處理了。
要抓 html 裡的資料,有兩種方式:
a. 用 HTML_DOM 抓。你可以使用 PHP 的 Tidy 模組或是網路找找 php parse html 的 class 來用。這方法比較通用,不會因為 html 改變換行或大小寫,甚至添加某些元素而得重寫。
b. 用 Regular Expression 抓。這方法簡單好用,但只適用於這個網頁內容不會有太大變化的場合。
wiseguy兄果然是大師
馬上被你發現
我先試試您說的
file_get_contents()
弄不出來的話
可以把原始擋給您試試嗎??
不對
我發現我是用 cURL 讀的耶
再用
foreach一行一行抓出來的
如果你只是要讀取網路上某個 html 檔內容,用 cURL 是拿電鋸切豆腐 ...
需要與對方互動才用得到 cURL。單抓網頁只需要:
$a = file_get_contents('http://somewhere');
即可。
要用PHP抓遠端Web上的內容嗎?
以前用的(但需要登入的網頁沒辦法抓, 因為我沒處理SessionID)
http://www.player.idv.tw/prog/index.php/HttpClient.php
因為那個網頁是公司內部的網站,是要登錄的,所以可能要用cURL才行
簡單的帳密登入,file_get_contents() 還是辦得到,不必動用 cURL。參考官方站範例:
http://php.net/manual/zh/context.curl.php
另外就算一行一行抓,$a .= $result; 這樣寫還是能夠只存成一個變數即可。不過這不是重點。重點是資料存在一個變數中,比較好處理你的需求。
感謝 wiseguy 兄的回答
因為公司的網頁不是只有登錄
還要塞值過重重的網頁
所以 cURL 這是電鋸還是的出馬
只是想請目 wiseguy 兄
因為公司大部分的網頁都是表格式的
如果想抓每個<TD>裡的關鍵資料
是不是一行一行抓比較好
因為
foreach($all as $key => $line)
{
}
理論上,每個<td>資料的間距都是相同的
就可用運用 $key 加固定的值
去抓要的檔案
我目前的作法都是這樣子做的
當然
如果要的檔案不在同一行中
但是
卻要抓多筆的話
如
<table border="1">
<tr>
<td>a
ll
en
</td>
<td>st
eve
</td>
</tr>
<tr>
<td>bil
l
</td>
<td>
j
h
o
n
</td>
</tr>
</table>
它的格式不整齊
但是我希望把每個<tr>中不同的<td>
存成不同的變數來用
例如
allen和bill是同一組變數
steve和jhon是另一組變數
請問要怎麼做呢??
答案還是上面的答案:用 Regular Expression 抓,簡單又快速:
<pre class="c" name="code"><?php
$t = <<< EOB
<table border="1">
<tr>
<td>a
ll
en
</td>
<td>st
eve
</td>
</tr>
<tr>
<td>bil
l
</td>
<td>
j
h
o
n
</td>
</tr>
</table>
EOB;
$t = str_replace("\n", '', $t); // 把換行通通去掉
preg_match_all('!<tr><td>(.+)</td><td>(.+)</td></tr>!iU', $t, $matches);
var_dump($matches);
?>
你要的兩組變數就在 $matches[1] 跟 $matches[2]。
記住,要精通 PHP,Regular Expression 非學,而且非精通不可。