如何用php获取网页表格,PHP获取网页上任意表格中内容的通用程序的制作
在工作中,經常需要對網頁上的表格內容進行處理,但是,由于表格內容制作過程中的隨意性,跨行跨列經常發生,所以我作了這幾個函數,以獲取表格的內容,程序中重要的地方已作了注解,所以在此不再重復說明,經過測試,非常成功.所以拿出來供大家共享.
//作者: 王朋武
//日期: 2005,3,31
//目的: 獲取網頁上(任意跨行跨列的)表格中的內容
function fun_proc_rowspan($l_str)
{
$l_a = explode("\n", $l_str);
for($i=count($l_a)-1; $i>=0; $i--) {
$l_str = trim($l_a[$i]);
if(empty($l_str)) continue;
$l_str = eregi_replace("
$l_b = explode("", $l_str);?//如有n個,則分成(n+1)個組,最開始一項為空.
for($j=0; $j
如 +----+----+----+----+----+----+----+
+----+----+----+----+----+----+----+此一行保存7格, 前6格都有rowspan=2
+-----------------------------+----+此一行只保存2格
+----------------------------------+此一行只保存1格
*/
$l_str = trim($l_b[$j]);
if(eregi("rowspan", $l_str)) {
$rowspan = preg_replace("/^
$rowcont = preg_replace("/^
(.+)/", "\\1", $l_str);$l_a = fun_add_row_td($l_a, $i, $j, $rowspan, $rowcont);
$l_str = implode("\n", $l_a);
return $l_str;
}
}//end of for j
}//end of for i
return $l_str;
}
function fun_add_row_td($l_a, $r, $l, $add_n, $add_cont)?//l_a是數組, r是插入的開始行,l是開始的列, add_n是跨多少行, add_cont是加的內容
{
for($i=$r; $i
if($i == $r) {
$l_str = eregi_replace("
$l_b = explode("", $l_str);
$l_c = "";
for($j=1; $j
if($j == $l) $l_c .= eregi_replace("rowspan", "", $l_b[$j]);?//去掉rowspan
else $l_c .= $l_b[$j];
}
$l_a[$i] = $l_c;
continue;
}
$l_str = eregi_replace("
分隔符$l_b = explode("", $l_str);?//以分組
$l_c = "";
for($j=1; $j
if($j == $l) {
$l_c .= "
".$add_cont."";}
$l_c .= $l_b[$j];
}//end of for j
$l_a[$i] = $l_c;?//更新后的新內容
}//end of for i
return $l_a;
}
function fun_proc_colspan($l_str)
{
$l_a = explode("\n", $l_str);
for($i=0; $i
$l_str = trim($l_a[$i]);
if(empty($l_str)) continue;
$l_str = eregi_replace("
$l_b = explode("", $l_str);?//如有n個,則分成(n+1)個組,最開始一項為空.
for($j=1; $j
$l_str = trim($l_b[$j]);
if(eregi("
$colspan = preg_replace("/^
$colcont = preg_replace("/^
(.+)/", "\\1", $l_str);$l_a = fun_add_col_td($l_a, $i, $j, $colspan, $colcont);
$l_str = implode("\n", $l_a);
return $l_str;
}
}//end of for j
}//end of for i
return $l_str;
}
function fun_add_col_td($l_a, $r, $l, $add_n, $add_cont)?//l_a是數組, r是插入的開始行,l是開始的列, add_n是跨多少列, add_cont是加的內容
{
$l_str = eregi_replace("
分隔符$l_b = explode("", $l_str);?//以分組
$l_c = "";
for($j=1; $j<=count($l_b); $j++) {?//略過開始的空項,從1開始
if($j == $l) {
$l_c .= eregi_replace("colspan", "", $l_b[$j]);?//去掉colspan
continue;
}
if($j == $l+1) {
for($k=0; $k
$l_c .= "
".$add_cont."";}
$l_c .= $l_b[$j];
}//end of for j
$l_a[$r] = $l_c;?//更新后的新內容
return $l_a;
}
$l_str = file_get_contents("test.htm");?//獲取網頁內容
$l_str = eregi_replace(".*
$l_str = eregi_replace("
.*", "", $l_str);$l_str = eregi_replace("\r", "", $l_str);?//去掉\r
$l_str = eregi_replace("\n", "", $l_str);?//去掉\n
$l_str = eregi_replace("", "\n", $l_str);?//使表格的一行成為一行數據
$l_str = strip_tags($l_str, "
");?//只保留,html表記while(eregi("
while(eregi("
/至此,表格處理已完成.
$l_str = eregi_replace("", "
", $l_str);?//給每一格之間加上標記
$l_str = strip_tags($l_str, "
");
$l_a = explode("\n", $l_str);
for($i=0; $i
$l_str = trim($l_a[$i]);
if(empty($l_str)) continue;
$l_b = explode("
", $l_str);
foreach($l_b as $val) {
echo $val."?";?//表格每列內容間加空格
}
echo "
";?//表格的一行顯示為一行
}
//附測試用例和測試結果:
/***********測試用表格*************************************************************
untitled document| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| a1 | 22 | a2 | a3 | |||
| b1 | b2 | b3 | b4 | 33 | ||
| c1 | c2 | c3 | c4 | 44 | ||
| d1 | d2 | d3 | d4 | |||
| e1 | e2 | e3 | e4 | e5 | ||
| f1 | f2 | f3 | ||||
| g1 | g2 | |||||
| h1 | ||||||
| i1 | i2 | i3 | i4 | i5 | ||
| j1 | j2 | j3 | j4 | |||
| k1 | k2 | |||||
| l1 | l2 | |||||
| m1 | m2 | m3 | ||||
*********************************************************************************/
/**************操作結果的表格***********************************************
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| a1 | 22 | a2 | a3 | a3 | a3 | a3 |
| b1 | 22 | b2 | b2 | b3 | b4 | 33 |
| c1 | 22 | c2 | c3 | c4 | 44 | 33 |
| d1 | 22 | d2 | d3 | d4 | 44 | 33 |
| e1 | 22 | e2 | e3 | e4 | e5 | 33 |
| f1 | 22 | f2 | f3 | f3 | f3 | f3 |
| g1 | 22 | g2 | g2 | g2 | g2 | g2 |
| h1 | h1 | h1 | h1 | h1 | h1 | h1 |
| i1 | i2 | i2 | i2 | i3 | i4 | i5 |
| j1 | j2 | j2 | j2 | j3 | j4 | j4 |
| k1 | k1 | k1 | k1 | k1 | k1 | k2 |
| l1 | l1 | l1 | l1 | l1 | l1 | l2 |
| m1 | m1 | m1 | m1 | m1 | m2 | m3 |
******************************************************************/
測試用表:
1234567
a122a2a3
b1b2b3b433
c1c2c3c444
d1d2d3d4
e1e2e3e4e5
f1f2f3
g1g2
h1
i1i2i3i4i5
j1j2j3j4
k1k2
l1l2
m1m2m3
測試結果的表:
1234567
a122a2a3a3a3a3
b122b2b2b3b433
c122c2c3c44433
d122d2d3d44433
e122e2e3e4e533
f122f2f3f3f3f3
g122g2g2g2g2g2
h1h1h1h1h1h1h1
i1i2i2i2i3i4i5
j1j2j2j2j3j4j4
k1k1k1k1k1k1k2
l1l1l1l1l1l1l2
m1m1m1m1m1m2m3
中國最大的web開發資源網站及技術社區,
總結
以上是生活随笔為你收集整理的如何用php获取网页表格,PHP获取网页上任意表格中内容的通用程序的制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swoole不是php,Swoole
- 下一篇: oracle遇null赋默认值,使用hi