Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP解析HTML_Php_Html_Parsing - Fatal编程技术网

用PHP解析HTML

用PHP解析HTML,php,html,parsing,Php,Html,Parsing,我有一个问题,我必须做一个网页的解析器。结构如下: <TABLE WIDTH=80%> <tr><td colspan=7><BR><BR></td></tr> <TR> <Td colspan=7><FONT FACE="arial" align=left><B><A NAME="TEST">Anagrafica</B><br&g

我有一个问题,我必须做一个网页的解析器。结构如下:

 <TABLE WIDTH=80%>

<tr><td colspan=7><BR><BR></td></tr>
<TR>
<Td colspan=7><FONT FACE="arial" align=left><B><A NAME="TEST">Anagrafica</B><br></TH>
</TR>
<tr><td colspan=7></td></tr>
<TR>
 <TH ALIGN=LEFT ><FONT COLOR="#AA0000" FACE="arial" SIZE="2">Name</FONT></TH>
  <TH></TH>
  <TH ALIGN=LEFT ><FONT COLOR="#AA0000" FACE="arial" SIZE="2">Surname</FONT></TH>
  <TH></TH>
  <TH ALIGN=LEFT ><FONT COLOR="#AA0000" FACE="arial" SIZE="2">ID</FONT></TH>
  <TH></TH>
 <TH ALIGN=LEFT ><FONT COLOR="#AA0000" FACE="arial" SIZE="2">Code</FONT></TH>
 </TR>

 <tr>
 <TD COLSPAN="7">
 <HR SIZE="1" NOSHADE></TD>
 <TR>

 <TR>
   <TD ALIGN="left" VALIGN="TOP" NOWRAP><FONT SIZE="1" FACE="arial">Mario</FONT>     </TD>
   <TD WIDTH="10"><VALIGN="TOP"><FONT SIZE="1" FACE="arial">&#160;</FONT></TD>
   <TD ALIGN="CENTER" VALIGN="TOP" NOWRAP><P ALIGN="CENTER"><FONT SIZE="1" FACE="arial"> Mario </FONT></TD>
   <TD WIDTH="10"><VALIGN="TOP"><FONT SIZE="1" FACE="arial">&#160;</FONT></TD>
   <TD ALIGN="LEFT" VALIGN="TOP" NOWRAP><FONT SIZE="1" FACE="arial">1</FONT></TD>
   <TD WIDTH="10"><VALIGN="TOP"><FONT SIZE="1" FACE="arial">a</FONT></TD>
   <TD ALIGN="LEFT" VALIGN="TOP" NOWRAP><FONT SIZE="1" FACE="arial">132</FONT></TD>

 <TR>
   <TD ALIGN="left" VALIGN="TOP" NOWRAP><FONT SIZE="1" FACE="arial">Mario</FONT>     </TD>
   <TD WIDTH="10"><VALIGN="TOP"><FONT SIZE="1" FACE="arial">&#160;</FONT></TD>
   <TD ALIGN="CENTER" VALIGN="TOP" NOWRAP><P ALIGN="CENTER"><FONT SIZE="1" FACE="arial"> Mario </FONT></TD>
   <TD WIDTH="10"><VALIGN="TOP"><FONT SIZE="1" FACE="arial">&#160;</FONT></TD>
   <TD ALIGN="LEFT" VALIGN="TOP" NOWRAP><FONT SIZE="1" FACE="arial">1</FONT></TD>
   <TD WIDTH="10"><VALIGN="TOP"><FONT SIZE="1" FACE="arial">a</FONT></TD>
   <TD ALIGN="LEFT" VALIGN="TOP" NOWRAP><FONT SIZE="1" FACE="arial">132</FONT></TD>

 <TR> 



Anagrafica
名称 姓 身份证件 密码
马里奥   马里奥   1. A. 132 马里奥   马里奥   1. A. 132
我想使用这个脚本获取4列的数据

$start = strpos($content,'<Td colspan=7><FONT FACE="arial" align=left><B><A NAME=');
if ($start == TRUE) {
    $end = strpos($content,'</TABLE>',$start) + 8;
    $table = substr($content,$start,$end-$start);
    preg_match_all("|<TD(.*)</TD>|U",$table,$rows);

    $x = 1;
    $counter = 1;
    echo "<table class=\"TFtable\">";
    foreach ($rows[0] as $row){
        if ((strpos($row,'<TR')===false)){
            preg_match_all("|<TD(.*)</TD>|U",$row,$cells);
            $status[$x] = strip_tags($cells[0][0]);
            $x = $x+1;
            $counter = $counter+1;
        }
        if ($counter % 7 == 1) {
            echo "<tr><td>{$status[2]} - {$status[4]} <br> {$status[6]} - {$status[1]}</td></tr>\n";
            $x = 1;
        }
    } 
    echo "</table>";

$start=strpos($content),尝试查看而不是重新注册HTML。使用
loadHTML()
可以让PHP解析HTML。请看一个例子。

如果您实际尝试构建解析器,您可能不想使用预构建的HTML/DOM解析器。如果是这种情况,您可能需要遵循以下步骤:

  • 标记化您的输入(您可以使用正则表达式进行此部分)
  • 处理你的标记,确定每个标记的含义。
    • 您可能需要研究所谓的“递归下降解析器”
    • 每个标记可能会更改以下标记的含义
    • 您可能需要查看行中的下一个令牌,而不进行处理
  • 返回输出,最有可能的形式是表示DOM树的对象
您可能需要查看该语言的正式定义,以确定哪些类型的表达式可能相互跟随。例如,开始标记的定义可能类似于以下内容(尽管这不是正式定义,并且可能包含错误):

同样,这可能是非常不准确的,您需要研究语言的正式定义

可能是一个很好的起点。

简单:使用。您不应该手动解析htmlObligatory: