PHPを使用してWebページ上の任意のテーブルのコンテンツを取得するための一般的なプログラムの作成

WBOY
リリース: 2016-06-21 08:58:44
オリジナル
1224 人が閲覧しました

程序|网页

  转载请联系作者: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."";
   }
   $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 .= "".$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



 
   
   
   
   
   
   
   
 
 
   
   
   
   
 
 
   
   
   
   
   
 
 
   
   
   
   
   
 
 
   
   
   
   
 
 
   
   
   
   
   
 
 
   
   
   
 
 
   
   
 
 
   
 
 
   
   
   
   
   
 
 
   
   
   
   
 
 
   
   
 
 
   
   
 
 
   
   
   
 
1234567
a122a2a3
b1b2b3b433
c1c2c3c444
d1d2d3d4
e1e2e3e4e5
f1f2f3
g1g2
h1
i1i2i3i4i5
j1j2j3j4
k1k2
l1l2
m1m2m3


*********************************************************************************/
/**************操作结果的表格***********************************************

                           
    22        a3 
    b2            33 
                44 
             
                 
        f3 
    g2 
  gt;                 
             
   
    gt;gt;gt;
m1         
1234567
a1a2a3 a3 a3
b122b2 b3b4
c122 c2c3c433
d122 d2d3d444 33
e122 e2e3e4e533
f122 f2f3 f3 f3
g122g2 g2 g2 g2
h1h1h1 h1 h1 h1 h1;
i1i2i2 i2 i3i4i5
j1j2j2 j2 j3j4j4
k1k1 k1 k1 k1 k1 k2 
l1l1l1 l1l1l1 l2 
m1 m1 m1 m1 m2m3
*********************************** *******************************/
测试用表:
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



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート