1

这是我从旧表加载数据的脚本,也就是说它是一种“不可编辑”的方式。

$document = new DOMDocument();
$document -> loadHTMLFile('http://www.table.html');
$rows   = $document -> getElementsByTagName('tr');

之后,我将<td>'s 加载到数组中:

    $numRow = 0;
    foreach($rows as $result){

// 15 columns to load.
        for($i = 0; $i < 15; $i++){
        $array[$numRow][$i] = $result
        ->getElementsByTagName('td')
        ->item($i)
        ->nodeValue;
        }
    $numRow++;
    }

到目前为止一切顺利,但问题开始了。所有行都有一个用于“描述”的字符串列,并且在描述中经常出现人为错误输入错误,例如:

这是一个单元格:(<td>Suppor<</td>有人在此错误地提示 IDK 如何)错误:Tag o invalid

或者当单元格包含像这样的“&”时:

另一个例子:<td>From A&A Limited.</td>错误: htmlParseEntityRef: expecting ';'

错误总是参考这一行$document -> loadHTMLFile('http://www.table.html');

如您所见,该表已15 columns成为$i = 4字符串列。我不是一个真正的专业程序员,也没有真正看到这一点。预先感谢任何可以帮助我的人。

4

3 回答 3

0

我认为您不会找到任何神奇的方法来修复损坏的 HTML,但是您可以稍微更改 libxml(为 DOMDocument 提供支持)处理错误的方式,以便为您提供尽可能多的可用输出。您是否尝试过将错误处理更改为内部?查看libxml_use_internal_errors()

于 2012-04-30T17:27:21.693 回答
0

我找到了这样做的解决方案:

@$document -> loadHTMLFile('http://www.table.html');
$rows   = $document -> getElementsByTagName('tr');

$nodeListLength = htmlentities($rows->length);
for ($i = 0; $i < $nodeListLength; $i ++)
{
    $node = $gastos->item(0);
    //-> VALORES A MOSTRAR EN TU QUERY
}

我希望它可以帮助另一个有同样问题的人。感谢检查我的问题的人。

于 2012-05-02T13:49:27.567 回答
0

尝试使用libxml_use_internal_errors(true);之前$document->loadHTMLFile(...);

于 2020-09-14T15:59:56.110 回答