找回密码
 注册
搜索
热搜: 回贴
微赢网络技术论坛 门户 网络编程 PHP 查看内容

PHP获取网页上任意表格中内容的通用程序的制作

2009-12-21 17:43| 发布者: admin| 查看: 65| 评论: 0|原作者: 琴姬

";
}
$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("/^(.+)<\/td>/", "\\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<$add_n-1; $k++)
$l_c .= "
";
}
$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("
  转载请联系作者:Email: pengwuwang@21cn.com darlingpeng@sina.com

在工作中,经常需要对网页上的表格内容进行处理,但是,由于表格内容制作过程中的随意性,跨行跨列经常发生,所以我作了这几个函数,以获取表格的内容,程序中重要的地方已作了注解,所以在此不再重复说明,经过测试,非常成功.所以拿出来供大家共享.
//作者: 王朋武
//日期: 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("/^(.+)<\/td>/", "\\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<$r+$add_n; $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<$l+$add_n; $j++) { //略过开始的空项,从1开始
if($j == $l) {
$l_c .= "
".$add_cont."".$add_cont."
.*", "", $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 a3a3a3
b1 22b2 b2b3 b4 33
c1 22c2 c3 c4 44 33
d1 22d2 d3 d4 4433
e1 22e2 e3 e4 e5 33
f1 22f2 f3 f3f3f3
g1 22g2 g2g2g2g2
h1 h1h1h1h1h1h1
i1 i2 i2i2i3 i4 i5
j1 j2 j2j2j3 j4 j4
k1 k1k1k1k1k1k2
l1 l1l1l1l1l1l2
m1 m1m1m1m1m2 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

最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 09:37 , Processed in 0.091161 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.